pgsql: Fix interval_mul() to not produce insane results.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix interval_mul() to not produce insane results.
Дата
Msg-id E1al14f-0000rC-GN@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
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.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/a898b409f66f956e99694710f537829db02652c0

Modified Files
--------------
src/backend/utils/adt/timestamp.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Allow to_timestamp(float8) to convert float infinity to timestam
Следующее
От: Robert Haas
Дата:
Сообщение: pgsql: Add new replication mode synchronous_commit = 'remote_apply'.