Re: avoid negating LONG_MIN in cash_out()

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Zhihong Yu <zyu(at)yugabyte(dot)com>
Cc: PostgreSQL Developers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: avoid negating LONG_MIN in cash_out()
Date: 2022-08-11 17:40:13
Message-ID: 23291.1660239613@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Zhihong Yu <zyu(at)yugabyte(dot)com> writes:
> In cash_out(), we have the following code:
> if (value < 0)
> {
> /* make the amount positive for digit-reconstruction loop */
> value = -value;

> The negation cannot be represented in type long when the value is LONG_MIN.

Possibly not good, but it seems like the subsequent loop works anyway:

regression=# select '-92233720368547758.08'::money;
money
-----------------------------
-$92,233,720,368,547,758.08
(1 row)

Note that this exact test case appears in money.sql, so we know that
it works everywhere, not only my machine.

> It seems we can error out when LONG_MIN is detected instead of continuing
> with computation.

How could you think that that's an acceptable solution? Once the
value is stored, we'd better be able to print it.

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Zhihong Yu 2022-08-11 17:55:48 Re: avoid negating LONG_MIN in cash_out()
Previous Message Zhihong Yu 2022-08-11 17:30:07 avoid negating LONG_MIN in cash_out()