@@ -46,7 +46,7 @@ rspamd_rfc2047_parser (const gchar *in, gsize len, gint *pencoding, | |||
rspamd_inet_addr_t *rspamd_parse_smtp_ip (const char *data, size_t len, | |||
rspamd_mempool_t *pool); | |||
guint64 rspamd_parse_smtp_date (const char *data, size_t len, GError **err); | |||
guint64 rspamd_parse_smtp_date (const unsigned char *data, size_t len, GError **err); | |||
#ifdef __cplusplus | |||
} |
@@ -15,6 +15,9 @@ | |||
if (n > 0 && n <= 31) { | |||
tm.tm_mday = n; | |||
} | |||
else { | |||
fbreak; | |||
} | |||
} | |||
} | |||
} | |||
@@ -52,8 +55,14 @@ | |||
if (n < 24) { | |||
tm.tm_hour = n; | |||
} | |||
else { | |||
fbreak; | |||
} | |||
} | |||
} | |||
else { | |||
fbreak; | |||
} | |||
} | |||
action Minute_Start { | |||
tmp = p; | |||
@@ -65,8 +74,14 @@ | |||
if (n < 60) { | |||
tm.tm_min = n; | |||
} | |||
else { | |||
fbreak; | |||
} | |||
} | |||
} | |||
else { | |||
fbreak; | |||
} | |||
} | |||
action Second_Start { | |||
tmp = p; | |||
@@ -78,8 +93,14 @@ | |||
if (n <= 60) { /* Leap second */ | |||
tm.tm_sec = n; | |||
} | |||
else { | |||
fbreak; | |||
} | |||
} | |||
} | |||
else { | |||
fbreak; | |||
} | |||
} | |||
action TZ_Sign { | |||
tmp = p; |
@@ -1,6 +1,7 @@ | |||
%%{ | |||
machine smtp_date_parser; | |||
alphtype unsigned char; | |||
include smtp_base "smtp_base.rl"; | |||
include smtp_date "smtp_date.rl"; | |||
@@ -13,9 +14,9 @@ | |||
%% write data; | |||
guint64 | |||
rspamd_parse_smtp_date (const char *data, size_t len, GError **err) | |||
rspamd_parse_smtp_date (const unsigned char *data, size_t len, GError **err) | |||
{ | |||
const gchar *p = data, *pe = data + len, *eof = data + len, *tmp = data; | |||
const unsigned char *p = data, *pe = data + len, *eof = data + len, *tmp = data; | |||
struct tm tm; | |||
glong tz = 0; | |||
gint cs = 0; | |||
@@ -27,7 +28,7 @@ rspamd_parse_smtp_date (const char *data, size_t len, GError **err) | |||
if ( cs < %%{ write first_final; }%% ) { | |||
g_set_error (err, g_quark_from_static_string ("smtp_date"), cs, "invalid date at offset %d (%c), state %d", | |||
p - data, *p, cs); | |||
(int)(p - data), (*p > 0 && *p < 128) ? *p : '?', cs); | |||
return (guint64)(-1); | |||
} | |||