Re: Operands don't affect result (CONSTANT_EXPRESSION_RESULT) (src/backend/utils/adt/jsonfuncs.c)
Ranier Vilela <ranier.vf@gmail.com>
From: Ranier Vilela <ranier.vf@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2021-02-11T13:08:09Z
Lists: pgsql-hackers
Em qui., 11 de fev. de 2021 às 01:46, Tom Lane <tgl@sss.pgh.pa.us> escreveu: > Ranier Vilela <ranier.vf@gmail.com> writes: > > *long* 4 *long int*, *signed long int* -2.147.483.648 a 2.147.483.647 > > Therefore long never be > INT_MAX at Windows 64 bits. > > Thus lindex is always false in this expression: > > if (errno != 0 || badp == c || *badp != '\0' || lindex > INT_MAX || > lindex > > < INT_MIN) > > At the same time, I think this code could be improved; but the way > to do that is to use strtoint(), rather than kluging the choice of > datatype even further. > No matter the function used strtol or strtoint, push_path will remain broken with Windows 64bits. Or need to correct the expression. Definitely using long is a bad idea. regards, Ranier Vilela
Commits
-
Simplify jsonfuncs.c code by using strtoint() not strtol().
- 69036aafb9a8 14.0 landed