diff options
Diffstat (limited to 'src/backend/utils/adt/datetime.c')
-rw-r--r-- | src/backend/utils/adt/datetime.c | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index fc6aa0ac7b0..34b6a2f2de4 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -939,14 +939,9 @@ DecodeDateTime(char **field, int *ftype, int nf, if (dterr) return dterr; - /* - * Check upper limit on hours; other limits checked in - * DecodeTime() - */ - /* test for > 24:00:00 */ - if (tm->tm_hour > HOURS_PER_DAY || - (tm->tm_hour == HOURS_PER_DAY && - (tm->tm_min > 0 || tm->tm_sec > 0 || *fsec > 0))) + /* check for time overflow */ + if (time_overflows(tm->tm_hour, tm->tm_min, tm->tm_sec, + *fsec)) return DTERR_FIELD_OVERFLOW; break; @@ -2221,16 +2216,8 @@ DecodeTimeOnly(char **field, int *ftype, int nf, else if (mer == PM && tm->tm_hour != HOURS_PER_DAY / 2) tm->tm_hour += HOURS_PER_DAY / 2; - /* - * This should match the checks in make_timestamp_internal - */ - if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_min > MINS_PER_HOUR - 1 || - tm->tm_sec < 0 || tm->tm_sec > SECS_PER_MINUTE || - tm->tm_hour > HOURS_PER_DAY || - /* test for > 24:00:00 */ - (tm->tm_hour == HOURS_PER_DAY && - (tm->tm_min > 0 || tm->tm_sec > 0 || *fsec > 0)) || - *fsec < INT64CONST(0) || *fsec > USECS_PER_SEC) + /* check for time overflow */ + if (time_overflows(tm->tm_hour, tm->tm_min, tm->tm_sec, *fsec)) return DTERR_FIELD_OVERFLOW; if ((fmask & DTK_TIME_M) != DTK_TIME_M) |