Browse Source

fix overflow corner case in strtoul-family functions

incorrect behavior occurred only in cases where the input overflows
unsigned long long, not just the (possibly lower) range limit for the
result type. in this case, processing of the '-' sign character was
not suppressed, and the function returned a value of 1 despite setting
errno to ERANGE.

(cherry picked from commit e2e1bb81485a37321d928a8d8b63f40b9d8fa228)
Rich Felker 10 năm trước cách đây
mục cha
commit
0a7aca63c0
1 tập tin đã thay đổi với 1 bổ sung0 xóa
  1. 1 0
      src/internal/intscan.c

+ 1 - 0
src/internal/intscan.c

@@ -83,6 +83,7 @@ unsigned long long __intscan(FILE *f, unsigned base, int pok, unsigned long long
 		for (; val[c]<base; c=shgetc(f));
 		errno = ERANGE;
 		y = lim;
+		if (lim&1) neg = 0;
 	}
 done:
 	shunget(f);