mirror of
https://github.com/postgres/postgres.git
synced 2025-09-03 15:22:11 +03:00
Fix handling of wide datetime input/output.
Many server functions use the MAXDATELEN constant to size a buffer for parsing or displaying a datetime value. It was much too small for the longest possible interval output and slightly too small for certain valid timestamp input, particularly input with a long timezone name. The long input was rejected needlessly; the long output caused interval_out() to overrun its buffer. ECPG's pgtypes library has a copy of the vulnerable functions, which bore the same vulnerabilities along with some of its own. In contrast to the server, certain long inputs caused stack overflow rather than failing cleanly. Back-patch to 8.4 (all supported versions). Reported by Daniel Schüssler, reviewed by Tom Lane. Security: CVE-2014-0063
This commit is contained in:
@@ -306,6 +306,13 @@ select '4 millenniums 5 centuries 4 decades 1 year 4 months 4 days 17 minutes 31
|
||||
@ 4541 years 4 mons 4 days 17 mins 31 secs
|
||||
(1 row)
|
||||
|
||||
-- test long interval output
|
||||
select '100000000y 10mon -1000000000d -1000000000h -10min -10.000001s ago'::interval;
|
||||
interval
|
||||
-------------------------------------------------------------------------------------------
|
||||
@ 100000000 years 10 mons -1000000000 days -1000000000 hours -10 mins -10.000001 secs ago
|
||||
(1 row)
|
||||
|
||||
-- test justify_hours() and justify_days()
|
||||
SELECT justify_hours(interval '6 months 3 days 52 hours 3 minutes 2 seconds') as "6 mons 5 days 4 hours 3 mins 2 seconds";
|
||||
6 mons 5 days 4 hours 3 mins 2 seconds
|
||||
|
@@ -108,6 +108,8 @@ select avg(f1) from interval_tbl;
|
||||
-- test long interval input
|
||||
select '4 millenniums 5 centuries 4 decades 1 year 4 months 4 days 17 minutes 31 seconds'::interval;
|
||||
|
||||
-- test long interval output
|
||||
select '100000000y 10mon -1000000000d -1000000000h -10min -10.000001s ago'::interval;
|
||||
|
||||
-- test justify_hours() and justify_days()
|
||||
|
||||
|
Reference in New Issue
Block a user