Re: Fix overflow in DecodeInterval
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Joseph Koshakow <koshy44@gmail.com>
Cc: Andres Freund <andres@anarazel.de>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2022-04-02T19:08:24Z
Lists: pgsql-hackers
Attachments
- v11-0001-Check-for-overflow-when-decoding-an-interval.patch (text/x-diff) patch v11-0001
Joseph Koshakow <koshy44@gmail.com> writes: > Ok I actually remember now, the issue is with the rounding > code in AdjustFractMicroseconds. > ... > I believe it's possible for `frac -= usec;` to result in a value greater > than 1 or less than -1 due to the lossiness of int64 to double > conversions. I think it's not, at least not for the interesting range of possible values in this code. Given that abs(frac) < 1 to start with, the abs value of usec can't exceed the value of scale, which is at most USECS_PER_DAY so it's at most 37 or so bits, which is well within the exact range for any sane implementation of double. It would take a very poor floating-point implementation to not get the right answer here. (And we're largely assuming IEEE-compliant floats these days.) Anyway, the other issue indeed turns out to be easy to fix. Attached is a v11 that deals with that. If the cfbot doesn't complain about it, I'll push this later today. regards, tom lane
Commits
-
Fix portability issues in datetime parsing.
- 591e088dd5b3 15.0 landed
-
Fix overflow hazards in interval input and output conversions.
- e39f99046710 15.0 landed
-
Add a couple more tests for interval input decoding.
- 1b208ebaf14e 15.0 landed