aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/datetime.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/datetime.c')
-rw-r--r--src/backend/utils/adt/datetime.c23
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)