ngx_http_parse_time() should support full 32-bit time
This commit is contained in:
parent
0459b338ae
commit
4a09fbf4f3
1 changed files with 12 additions and 9 deletions
|
@ -16,6 +16,7 @@ ngx_http_parse_time(u_char *value, size_t len)
|
||||||
u_char *p, *end;
|
u_char *p, *end;
|
||||||
ngx_int_t month;
|
ngx_int_t month;
|
||||||
ngx_uint_t day, year, hour, min, sec;
|
ngx_uint_t day, year, hour, min, sec;
|
||||||
|
uint64_t time;
|
||||||
enum {
|
enum {
|
||||||
no = 0,
|
no = 0,
|
||||||
rfc822, /* Tue, 10 Nov 2002 23:50:13 */
|
rfc822, /* Tue, 10 Nov 2002 23:50:13 */
|
||||||
|
@ -230,14 +231,6 @@ ngx_http_parse_time(u_char *value, size_t len)
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (NGX_TIME_T_SIZE <= 4)
|
|
||||||
|
|
||||||
if (year >= 2038) {
|
|
||||||
return NGX_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* shift new year to March 1 and start months from 1 (not 0),
|
* shift new year to March 1 and start months from 1 (not 0),
|
||||||
* it is needed for Gauss' formula
|
* it is needed for Gauss' formula
|
||||||
|
@ -250,7 +243,7 @@ ngx_http_parse_time(u_char *value, size_t len)
|
||||||
|
|
||||||
/* Gauss' formula for Grigorian days since March 1, 1 BC */
|
/* Gauss' formula for Grigorian days since March 1, 1 BC */
|
||||||
|
|
||||||
return (
|
time = (uint64_t) (
|
||||||
/* days in years including leap years since March 1, 1 BC */
|
/* days in years including leap years since March 1, 1 BC */
|
||||||
|
|
||||||
365 * year + year / 4 - year / 100 + year / 400
|
365 * year + year / 4 - year / 100 + year / 400
|
||||||
|
@ -269,4 +262,14 @@ ngx_http_parse_time(u_char *value, size_t len)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
- 719527 + 31 + 28) * 86400 + hour * 3600 + min * 60 + sec;
|
- 719527 + 31 + 28) * 86400 + hour * 3600 + min * 60 + sec;
|
||||||
|
|
||||||
|
#if (NGX_TIME_T_SIZE <= 4)
|
||||||
|
|
||||||
|
if (time > 0x7fffffff) {
|
||||||
|
return NGX_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return (time_t) time;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue