On Fri, 2020-01-03 at 17:08 -0700, Erich E. Hoover wrote:
+ if (*p == '+' || *p == '-') { - tmp = val * 10 + p[i] - '0'; - if (val > MAX_UINT64 / 10 || tmp < val) + if (len == 1 || (len == 2 && *(p+1) == '.')) { - for (; i < nb_digits; i++) exp++; - break; + ret = 0; + return S_OK; }
'ret' is a pointer.
+ ret = 0; + return S_OK;
Same here.
+ for (i = 0; i < len; i++) { - if (exp & 1) exp_val *= exp_mul; - exp_mul *= exp_mul; + if (p[i] >= '0' && p[i] <= '9') continue; + if (p[i] != 'e' && p[i] != 'E' && p[i] != '.' && p[i] != '+' && p[i] != '-') + return WS_E_INVALID_FORMAT; }
Is this part really necessary? I also get new failures with a non-mingw build: reader.c:3729: Test failed: 0: got 803d0000 reader.c:3729: Test failed: 1: got 803d0000 reader.c:3729: Test failed: 2: got 803d0000 reader.c:3729: Test failed: 8: got 803d0000 reader.c:3729: Test failed: 9: got 803d0000 reader.c:3729: Test failed: 10: got 803d0000 ... Looks like scanf returns a different result for %n in this case. It probably shouldn't block this patch though.