@@ -32,21 +32,21 @@ nonnull_all
32
32
static really_inline int32_t parse_time (
33
33
parser_t * parser ,
34
34
const type_info_t * type ,
35
- const rdata_info_t * item ,
35
+ const rdata_info_t * field ,
36
36
rdata_t * rdata ,
37
37
const token_t * token )
38
38
{
39
+ if (token -> length != 14 )
40
+ return parse_int32 (parser , type , field , rdata , token );
41
+
39
42
uint64_t d [14 ]; // YYYYmmddHHMMSS
40
43
const char * p = token -> data ;
41
44
for (int i = 0 ; i < 14 ; i ++ ) {
42
45
d [i ] = (uint8_t )p [i ] - '0' ;
43
46
if (d [i ] > 9 )
44
- SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (item ), NAME (type ));
47
+ SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (field ), NAME (type ));
45
48
}
46
49
47
- if (token -> length != 14 )
48
- SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (item ), NAME (type ));
49
-
50
50
// code adapted from Python 2.4.1 sources (Lib/calendar.py)
51
51
const uint64_t year = (d [0 ] * 1000 ) + (d [1 ] * 100 ) + (d [2 ] * 10 ) + d [3 ];
52
52
const uint64_t mon = (d [4 ] * 10 ) + d [5 ];
@@ -56,17 +56,17 @@ static really_inline int32_t parse_time(
56
56
const uint64_t sec = (d [12 ] * 10 ) + d [13 ];
57
57
58
58
if (year < 1970 || year > 2106 )
59
- SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (item ), NAME (type ));
59
+ SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (field ), NAME (type ));
60
60
61
61
uint64_t leap_year = is_leap_year (year );
62
62
uint64_t days = 365 * (year - 1970 ) + leap_days (1970 , year );
63
63
64
64
if (!mon || mon > 12 )
65
- SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (item ), NAME (type ));
65
+ SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (field ), NAME (type ));
66
66
if (!mday || mday > days_in_month [mon ] + (leap_year & (mon == 2 )))
67
- SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (item ), NAME (type ));
67
+ SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (field ), NAME (type ));
68
68
if (hour > 23 || min > 59 || sec > 59 )
69
- SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (item ), NAME (type ));
69
+ SYNTAX_ERROR (parser , "Invalid %s in %s" , NAME (field ), NAME (type ));
70
70
71
71
days += days_to_month [mon ];
72
72
days += (mon > 2 ) & leap_year ;
0 commit comments