Selaa lähdekoodia

[Minor] Add some more error cases to the smtp date parsing

tags/2.7
Vsevolod Stakhov 3 vuotta sitten
vanhempi
commit
fe908bdce8
3 muutettua tiedostoa jossa 26 lisäystä ja 4 poistoa
  1. 1
    1
      src/libmime/smtp_parsers.h
  2. 21
    0
      src/ragel/smtp_date.rl
  3. 4
    3
      src/ragel/smtp_date_parser.rl

+ 1
- 1
src/libmime/smtp_parsers.h Näytä tiedosto

@@ -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
}

+ 21
- 0
src/ragel/smtp_date.rl Näytä tiedosto

@@ -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;

+ 4
- 3
src/ragel/smtp_date_parser.rl Näytä tiedosto

@@ -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);
}


Loading…
Peruuta
Tallenna