소스 검색

fix off-by-one error that caused uninitialized memory read in floatscan

this caused misreading of certain floating point values that are exact
multiples of large powers of ten, unpredictable depending on prior
stack contents.
Rich Felker 13 년 전
부모
커밋
28c5d46d84
1개의 변경된 파일1개의 추가작업 그리고 1개의 파일을 삭제
  1. 1 1
      src/internal/floatscan.c

+ 1 - 1
src/internal/floatscan.c

@@ -244,7 +244,7 @@ static long double decfloat(FILE *f, int c, int bits, int emin, int sign, int po
 
 	/* Assemble desired bits into floating point variable */
 	for (y=i=0; i<LD_B1B_DIG; i++) {
-		if ((a+i & MASK)==z) x[z=(z+1 & MASK)] = 0;
+		if ((a+i & MASK)==z) x[(z=(z+1 & MASK))-1] = 0;
 		y = 1000000000.0L * y + x[a+i & MASK];
 	}