BUG #18200: Undefined behaviour in interval_div
The Post Office <noreply@postgresql.org>
From: PG Bug reporting form <noreply@postgresql.org>
To: pgsql-bugs@lists.postgresql.org
Cc: exclusion@gmail.com
Date: 2023-11-15T13:00:01Z
Lists: pgsql-bugs
The following bug has been logged on the website: Bug reference: 18200 Logged by: Alexander Lakhin Email address: exclusion@gmail.com PostgreSQL version: 16.1 Operating system: Ubuntu 22.04 Description: The following query: SELECT interval '12000000 months' / 0.001; triggers an ubsan-detected error: timestamp.c:3408:18: runtime error: 1.2e+10 is outside the range of representable values of type 'int' Without ubsan the result is: -178956970 years -8 mons -2562047788:00:54.775808 This bogus value returned on REL_15_STABLE .. master, but on e39f99046~1 I get: ERROR: interval out of range without ubsan. Though with the sanitizer I see the same complaint (and it can be seen on previous branches including REL_12_STABLE): timestamp.c:3318:18: runtime error: 1.2e+10 is outside the range of representable values of type 'int'
Commits
-
Guard against overflow in interval_mul() and interval_div().
- f499d2b20b42 12.18 landed
- 428770aadca9 13.14 landed
- 2ffcebdba4cf 14.11 landed
- 2851aa7d1fc3 15.6 landed
- 72d0c135bd7a 16.2 landed
- b218fbb7a35f 17.0 landed