]> granicus.if.org Git - postgresql/commitdiff
Reject out-of-range dates in to_date().
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 14 Jan 2013 20:19:48 +0000 (15:19 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 14 Jan 2013 20:19:48 +0000 (15:19 -0500)
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

src/backend/utils/adt/formatting.c

index c014f3f62ff80147942660bde1fb57a3abaa59ef..0c3a9f1c42e6b21a1ce5258976f3b33dce943f87 100644 (file)
@@ -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);