diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2016-03-29 17:21:12 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2016-03-29 17:21:12 -0400 |
commit | a898b409f66f956e99694710f537829db02652c0 (patch) | |
tree | da7dda9c1cbad477f74a0b7ae3f776b5c6558daf /doc/src | |
parent | e511d878f3bbc205cd260a79740e646eea3c1cd3 (diff) | |
download | postgresql-a898b409f66f956e99694710f537829db02652c0.tar.gz postgresql-a898b409f66f956e99694710f537829db02652c0.zip |
Fix interval_mul() to not produce insane results.
interval_mul() attempts to prevent its calculations from producing silly
results, but it forgot that zero times infinity yields NaN in IEEE
arithmetic. Hence, a case like '1 second'::interval * 'infinity'::float8
produced a NaN for the months product, which didn't trigger the range
check, resulting in bogus and possibly platform-dependent output.
This isn't terribly obvious to the naked eye because if you try that
exact case, you get "interval out of range" which is what you expect
--- but if you look closer, the error is coming from interval_out not
interval_mul. interval_mul has allowed a bogus value into the system.
Fix by adding isnan tests.
Noted while testing Vitaly Burovoy's fix for infinity input to
to_timestamp(). Given the lack of field complaints, I doubt this
is worth a back-patch.
Diffstat (limited to 'doc/src')
0 files changed, 0 insertions, 0 deletions