]> granicus.if.org Git - postgresql/commit
Adjust datetime parsing to be more robust. We now pass the length of the
authorNeil Conway <neilc@samurai.com>
Thu, 26 May 2005 02:10:03 +0000 (02:10 +0000)
committerNeil Conway <neilc@samurai.com>
Thu, 26 May 2005 02:10:03 +0000 (02:10 +0000)
commit92525dd6c944a4c1233f2eaa6eed8e8d2b89669e
treeb2d9105c530ac76cabc9ba08adc39de30e0ae69a
parent9a1a9865803b5fec8df9dcf74a8ad97c7db5384d
Adjust datetime parsing to be more robust. We now pass the length of the
working buffer into ParseDateTime() and reject too-long input there,
rather than checking the length of the input string before calling
ParseDateTime(). The old method was bogus because ParseDateTime() can use
a variable amount of working space, depending on the content of the
input string (e.g. how many fields need to be NUL terminated). This fixes
a minor stack overrun -- I don't _think_ it's exploitable, although I
won't claim to be an expert.

Along the way, fix a bug reported by Mark Dilger: the working buffer
allocated by interval_in() was too short, which resulted in rejecting
some perfectly valid interval input values. I added a regression test for
this fix.
src/backend/utils/adt/date.c
src/backend/utils/adt/datetime.c
src/backend/utils/adt/nabstime.c
src/backend/utils/adt/timestamp.c
src/include/utils/datetime.h
src/test/regress/expected/interval.out
src/test/regress/sql/interval.sql