Re: 64-bit integer subtraction bug on some platforms
От | Laurenz Albe |
---|---|
Тема | Re: 64-bit integer subtraction bug on some platforms |
Дата | |
Msg-id | 2fb325a05184d44f601a3fca0117dd3e04f07eba.camel@cybertec.at обсуждение исходный текст |
Ответ на | 64-bit integer subtraction bug on some platforms (Dean Rasheed <dean.a.rasheed@gmail.com>) |
Ответы |
Re: 64-bit integer subtraction bug on some platforms
|
Список | pgsql-hackers |
On Wed, 2023-11-08 at 11:58 +0000, Dean Rasheed wrote: > One of the new tests in the infinite interval patch has revealed a bug > in our 64-bit integer subtraction code. Consider the following: > > select 0::int8 - '-9223372036854775808'::int8; > > This should overflow, since the correct result (+9223372036854775808) > is out of range. However, on platforms without integer overflow > builtins or 128-bit integers, pg_sub_s64_overflow() does the > following: > > if ((a < 0 && b > 0 && a < PG_INT64_MIN + b) || > (a > 0 && b < 0 && a > PG_INT64_MAX + b)) > { > *result = 0x5EED; /* to avoid spurious warnings */ > return true; > } > *result = a - b; > return false; > > which fails to spot the fact that overflow is also possible when a == > 0. So on such platforms, it returns the wrong result. > > Patch attached. The patch looks good to me. Yours, Laurenz Albe
В списке pgsql-hackers по дате отправления: