diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2009-10-26 16:13:11 +0000 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2009-10-26 16:13:11 +0000 |
commit | 2078e384a3ac148b48973c0d67bce90d5792fe3b (patch) | |
tree | 668cbbcc3867e4ca1a22372ee9b2f3396bae71cc /src/backend/utils/adt | |
parent | 9f2ee8f287098fb8067593b38da0650df458b20a (diff) | |
download | postgresql-2078e384a3ac148b48973c0d67bce90d5792fe3b.tar.gz postgresql-2078e384a3ac148b48973c0d67bce90d5792fe3b.zip |
Fix range check in date_recv that tried to limit accepted values to only
those accepted by date_in(). I confused julian day numbers and number of
days since the postgres epoch 2000-01-01 in the original patch.
I just noticed that it's still easy to get such out-of-range values into
the database using to_date or +- operators, but this patch doesn't do
anything about those functions.
Per report from James Pye.
Diffstat (limited to 'src/backend/utils/adt')
-rw-r--r-- | src/backend/utils/adt/date.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 2b82c20efe7..9b929f7eb23 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.148 2009/09/04 11:20:22 heikki Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.149 2009/10/26 16:13:11 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -208,7 +208,8 @@ date_recv(PG_FUNCTION_ARGS) result = (DateADT) pq_getmsgint(buf, sizeof(DateADT)); /* Limit to the same range that date_in() accepts. */ - if (result < 0 || result > JULIAN_MAX) + if (result < -POSTGRES_EPOCH_JDATE || + result >= JULIAN_MAX - POSTGRES_EPOCH_JDATE) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("date out of range"))); |