Re: overflow in snprintf() when printing INT64_MIN

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: overflow in snprintf() when printing INT64_MIN
Дата
Msg-id 20180928004459.266cwsr3vlv3pohj@alap3.anarazel.de
обсуждение исходный текст
Ответ на Re: overflow in snprintf() when printing INT64_MIN  (Andres Freund <andres@anarazel.de>)
Список pgsql-hackers
Hi,

On 2018-09-27 17:34:54 -0700, Andres Freund wrote:
> On 2018-09-27 20:18:12 -0400, Tom Lane wrote:
> > >     /* Handle +/- */
> > >     if (dosign && adjust_sign((value < 0), forcesign, &signvalue);
> > >         uvalue = -(uint64) value;
> > >     else
> > >         uvalue = (uint64) value;
> > 
> > Hm, what does -x mean for an unsigned value?  I'm not really
> > convinced this is conceptually better.
> 
> 6.2.5 (9): "... A computation involving unsigned operands can never
> overflow, because a result that cannot be represented by the resulting
> unsigned integer type is reduced modulo the number that is one greater
> than the largest value that can be represented by the resulting type."
> 
> (unsigned)((int)-1) == 4294967295
> -(unsigned)4294967295 == 1
> 
> I think that's well defined.

I guess some might consider
  uvalue = (uint64) 0 - (uint64) value
to be easier to reason about?

Greetings,

Andres Freund


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: overflow in snprintf() when printing INT64_MIN
Следующее
От: Amit Langote
Дата:
Сообщение: Re: Postgres 11 release notes