[PATCH resend] webservices: Use sscanf to convert strings to doubles.

Hans Leidekker hans at codeweavers.com
Mon Jan 6 04:52:30 CST 2020


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.





More information about the wine-devel mailing list