aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2013-01-14 15:19:48 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2013-01-14 15:19:48 -0500
commit5c4eb9166ed35dedc010ec973a55ff1a244cf87a (patch)
tree8c5fbe9e614e513f52d2ab203c5a6a18ae1ec4f2
parent7127293a5d9f655ce3ec7e009f18bac8d3d0bc1c (diff)
downloadpostgresql-5c4eb9166ed35dedc010ec973a55ff1a244cf87a.tar.gz
postgresql-5c4eb9166ed35dedc010ec973a55ff1a244cf87a.zip
Reject out-of-range dates in to_date().
Dates outside the supported range could be entered, but would not print reasonably, and operations such as conversion to timestamp wouldn't behave sanely either. Since this has the potential to result in undumpable table data, it seems worth back-patching. Hitoshi Harada
-rw-r--r--src/backend/utils/adt/formatting.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
index c014f3f62ff..0c3a9f1c42e 100644
--- a/src/backend/utils/adt/formatting.c
+++ b/src/backend/utils/adt/formatting.c
@@ -3332,6 +3332,12 @@ to_date(PG_FUNCTION_ARGS)
do_to_timestamp(date_txt, fmt, &tm, &fsec);
+ if (!IS_VALID_JULIAN(tm.tm_year, tm.tm_mon, tm.tm_mday))
+ ereport(ERROR,
+ (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
+ errmsg("date out of range: \"%s\"",
+ text_to_cstring(date_txt))));
+
result = date2j(tm.tm_year, tm.tm_mon, tm.tm_mday) - POSTGRES_EPOCH_JDATE;
PG_RETURN_DATEADT(result);