|  | 
| 8 | 8 |  * | 
| 9 | 9 |  * | 
| 10 | 10 |  * IDENTIFICATION | 
| 11 |  | - *	  $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.203 2009/03/22 01:12:31 tgl Exp $ | 
|  | 11 | + *	  $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.204 2009/05/01 19:29:07 tgl Exp $ | 
| 12 | 12 |  * | 
| 13 | 13 |  *------------------------------------------------------------------------- | 
| 14 | 14 |  */ | 
| @@ -950,7 +950,8 @@ DecodeDateTime(char **field, int *ftype, int nf, | 
| 950 | 950 | 				 */ | 
| 951 | 951 | 				/* test for > 24:00:00 */ | 
| 952 | 952 | 				if (tm->tm_hour > 24 || | 
| 953 |  | -					(tm->tm_hour == 24 && (tm->tm_min > 0 || tm->tm_sec > 0))) | 
|  | 953 | +					(tm->tm_hour == 24 && | 
|  | 954 | +					 (tm->tm_min > 0 || tm->tm_sec > 0 || *fsec > 0))) | 
| 954 | 955 | 					return DTERR_FIELD_OVERFLOW; | 
| 955 | 956 | 				break; | 
| 956 | 957 | 
 | 
| @@ -2058,15 +2059,13 @@ DecodeTimeOnly(char **field, int *ftype, int nf, | 
| 2058 | 2059 | 
 | 
| 2059 | 2060 | 	if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_min > 59 || | 
| 2060 | 2061 | 		tm->tm_sec < 0 || tm->tm_sec > 60 || tm->tm_hour > 24 || | 
| 2061 |  | -	/* test for > 24:00:00 */ | 
|  | 2062 | +		/* test for > 24:00:00 */ | 
|  | 2063 | +		(tm->tm_hour == 24 && | 
|  | 2064 | +		 (tm->tm_min > 0 || tm->tm_sec > 0 || *fsec > 0)) || | 
| 2062 | 2065 | #ifdef HAVE_INT64_TIMESTAMP | 
| 2063 |  | -		(tm->tm_hour == 24 && (tm->tm_min > 0 || tm->tm_sec > 0 || | 
| 2064 |  | -							   *fsec > INT64CONST(0))) || | 
| 2065 |  | -		*fsec < INT64CONST(0) || *fsec >= USECS_PER_SEC | 
|  | 2066 | +		*fsec < INT64CONST(0) || *fsec > USECS_PER_SEC | 
| 2066 | 2067 | #else | 
| 2067 |  | -		(tm->tm_hour == 24 && (tm->tm_min > 0 || tm->tm_sec > 0 || | 
| 2068 |  | -							   *fsec > 0)) || | 
| 2069 |  | -		*fsec < 0 || *fsec >= 1 | 
|  | 2068 | +		*fsec < 0 || *fsec > 1 | 
| 2070 | 2069 | #endif | 
| 2071 | 2070 | 		) | 
| 2072 | 2071 | 		return DTERR_FIELD_OVERFLOW; | 
| @@ -2386,11 +2385,11 @@ DecodeTime(char *str, int fmask, int range, | 
| 2386 | 2385 | #ifdef HAVE_INT64_TIMESTAMP | 
| 2387 | 2386 | 	if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_min > 59 || | 
| 2388 | 2387 | 		tm->tm_sec < 0 || tm->tm_sec > 60 || *fsec < INT64CONST(0) || | 
| 2389 |  | -		*fsec >= USECS_PER_SEC) | 
|  | 2388 | +		*fsec > USECS_PER_SEC) | 
| 2390 | 2389 | 		return DTERR_FIELD_OVERFLOW; | 
| 2391 | 2390 | #else | 
| 2392 | 2391 | 	if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_min > 59 || | 
| 2393 |  | -		tm->tm_sec < 0 || tm->tm_sec > 60 || *fsec < 0 || *fsec >= 1) | 
|  | 2392 | +		tm->tm_sec < 0 || tm->tm_sec > 60 || *fsec < 0 || *fsec > 1) | 
| 2394 | 2393 | 		return DTERR_FIELD_OVERFLOW; | 
| 2395 | 2394 | #endif | 
| 2396 | 2395 | 
 | 
|  | 
0 commit comments