Reject out-of-range dates in date_in().
authorTom Lane
Thu, 9 Feb 2006 03:39:17 +0000 (03:39 +0000)
committerTom Lane
Thu, 9 Feb 2006 03:39:17 +0000 (03:39 +0000)
Kris Jurka

doc/src/sgml/datatype.sgml
src/backend/utils/adt/date.c

index 811033cb59ef9c3e68792b61499e6e0ab1f814b5..4007cc2d207b399a17f24a09c3ebc4cae0f0ebce 100644 (file)
@@ -1,5 +1,5 @@
 
 
  
@@ -1360,7 +1360,7 @@ SELECT b, char_length(b) FROM test2;
         4 bytes
         dates only
         4713 BC
-        32767 AD
+        5874897 AD
         1 day
        
        
index 619a099b654d09e4ec3355a81a16826f72cda2ba..c070f00cf61470a8a99cc0392248dcd55618d327 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.122 2005/10/15 02:49:28 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.123 2006/02/09 03:39:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -97,6 +97,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);