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-03T16:03:23Z
Lists: pgsql-hackers
I wrote: > Joseph Koshakow <koshy44@gmail.com> writes: >> I think I know that the issue is. It's with `ParseISO8601Number` and >> the minutes field "1.". >> Previously that function parsed the entire field into a single double, >> so "1." would >> be parsed into 1.0. Now we try to parse the integer and decimal parts >> separately. So >> we first parse "1" into 1 and then fail to "." into anything because >> it's not a valid decimal. > Interesting point, but then why doesn't it fail everywhere? Oh ... a bit of testing says that strtod() on an empty string succeeds (returning zero) on Linux, but fails with EINVAL on AIX. The latter is a lot less surprising than the former, so we'd better cope. (Reading POSIX with an eagle eye, it looks like both behaviors are allowed per spec: this is why you have to check that endptr was advanced to be sure everything is kosher.) 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