aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-02-09 03:40:42 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-02-09 03:40:42 +0000
commita14302080fc90ef419b94c92f246665aaa51e194 (patch)
tree5030a818d9e80232208a589d0646831ce9a84d5f
parentf9ce97c5a11838444fd4f063a2568f8c3c8777a7 (diff)
downloadpostgresql-a14302080fc90ef419b94c92f246665aaa51e194.tar.gz
postgresql-a14302080fc90ef419b94c92f246665aaa51e194.zip
Reject out-of-range dates in date_in().
Kris Jurka
-rw-r--r--doc/src/sgml/datatype.sgml4
-rw-r--r--src/backend/utils/adt/date.c7
2 files changed, 8 insertions, 3 deletions
diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml
index 6ca4e37c00d..78d606bf294 100644
--- a/doc/src/sgml/datatype.sgml
+++ b/doc/src/sgml/datatype.sgml
@@ -1,5 +1,5 @@
<!--
-$PostgreSQL: pgsql/doc/src/sgml/datatype.sgml,v 1.154.4.1 2005/01/22 23:05:47 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/datatype.sgml,v 1.154.4.2 2006/02/09 03:40:42 tgl Exp $
-->
<chapter id="datatype">
@@ -1358,7 +1358,7 @@ SELECT b, char_length(b) FROM test2;
<entry>4 bytes</entry>
<entry>dates only</entry>
<entry>4713 BC</entry>
- <entry>32767 AD</entry>
+ <entry>5874897 AD</entry>
<entry>1 day</entry>
</row>
<row>
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index 0e2eb954656..3e8ab71af54 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.104.4.2 2005/05/26 02:10:02 neilc Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.104.4.3 2006/02/09 03:40:42 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -96,6 +96,11 @@ date_in(PG_FUNCTION_ARGS)
break;
}
+ 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\"", str)));
+
date = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - POSTGRES_EPOCH_JDATE;
PG_RETURN_DATEADT(date);