From: Tom Lane Date: Mon, 14 Jan 2013 20:19:48 +0000 (-0500) Subject: Reject out-of-range dates in to_date(). X-Git-Tag: REL8_4_16~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e2120d756885ce03e7b75b6aec2e93a63ce68a85;p=thirdparty%2Fpostgresql.git 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 --- diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 0ce2618673c..cb99b86b23e 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -3079,6 +3079,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);