From: Vsevolod Stakhov Date: Mon, 25 Apr 2016 08:40:00 +0000 (+0100) Subject: [Fix] Fix SMTP address parsing machine X-Git-Tag: 1.3.0~641 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=dc5966e5907dc159452ebe86b4ac6d656f7c806d;p=rspamd.git [Fix] Fix SMTP address parsing machine --- diff --git a/src/libmime/parsers/smtp_addr_parser.c b/src/libmime/parsers/smtp_addr_parser.c index df6239332..f5476054f 100644 --- a/src/libmime/parsers/smtp_addr_parser.c +++ b/src/libmime/parsers/smtp_addr_parser.c @@ -1,7 +1,7 @@ #line 1 "src/ragel/smtp_addr_parser.rl" -#line 57 "src/ragel/smtp_addr_parser.rl" +#line 76 "src/ragel/smtp_addr_parser.rl" @@ -10,39 +10,39 @@ static const char _smtp_addr_parser_trans_keys[] = { 0, 0, 9, 126, 33, 126, 33, 126, 48, 122, 48, 122, 48, 122, 48, 122, 46, 122, 48, 57, 46, 57, 48, 57, 46, 57, 48, 57, 48, 93, 48, 93, 93, 93, 46, 57, 46, 46, 46, 57, 46, 46, 46, 122, 46, 122, 48, 122, - 33, 126, 33, 126, 48, 122, 32, 126, 64, 64, 32, 126, 33, 126, 33, 126, - 33, 126, 48, 122, 46, 122, 48, 122, 48, 122, 48, 122, 46, 122, 48, 57, - 46, 57, 48, 57, 46, 57, 48, 57, 48, 93, 48, 93, 93, 93, 62, 62, - 46, 57, 46, 46, 46, 57, 46, 46, 46, 122, 46, 122, 48, 122, 33, 126, - 33, 126, 48, 122, 32, 126, 64, 64, 32, 126, 48, 122, 44, 122, 64, 64, - 33, 126, 48, 122, 48, 122, 44, 122, 64, 64, 33, 126, 48, 122, 9, 122, - 9, 32, 9, 32, 9, 32, 9, 32, 0 + 33, 126, 33, 126, 48, 122, 32, 126, 32, 126, 64, 64, 32, 126, 33, 126, + 33, 126, 33, 126, 48, 122, 46, 122, 48, 122, 48, 122, 48, 122, 46, 122, + 48, 57, 46, 57, 48, 57, 46, 57, 48, 57, 48, 93, 48, 93, 93, 93, + 62, 62, 46, 57, 46, 46, 46, 57, 46, 46, 46, 122, 46, 122, 48, 122, + 33, 126, 33, 126, 48, 122, 32, 126, 32, 126, 64, 64, 32, 126, 48, 122, + 44, 122, 64, 64, 33, 126, 48, 122, 48, 122, 44, 122, 64, 64, 33, 126, + 48, 122, 9, 122, 9, 32, 9, 32, 9, 32, 9, 32, 0 }; static const char _smtp_addr_parser_key_spans[] = { 0, 118, 94, 94, 75, 75, 75, 75, 77, 10, 12, 10, 12, 10, 46, 46, 1, 12, 1, 12, 1, 77, 77, 75, - 94, 94, 75, 95, 1, 95, 94, 94, - 94, 75, 77, 75, 75, 75, 77, 10, - 12, 10, 12, 10, 46, 46, 1, 1, - 12, 1, 12, 1, 77, 77, 75, 94, - 94, 75, 95, 1, 95, 75, 79, 1, - 94, 75, 75, 79, 1, 94, 75, 114, - 24, 24, 24, 24 + 94, 94, 75, 95, 95, 1, 95, 94, + 94, 94, 75, 77, 75, 75, 75, 77, + 10, 12, 10, 12, 10, 46, 46, 1, + 1, 12, 1, 12, 1, 77, 77, 75, + 94, 94, 75, 95, 95, 1, 95, 75, + 79, 1, 94, 75, 75, 79, 1, 94, + 75, 114, 24, 24, 24, 24 }; static const short _smtp_addr_parser_index_offsets[] = { 0, 0, 119, 214, 309, 385, 461, 537, 613, 691, 702, 715, 726, 739, 750, 797, 844, 846, 859, 861, 874, 876, 954, 1032, - 1108, 1203, 1298, 1374, 1470, 1472, 1568, 1663, - 1758, 1853, 1929, 2007, 2083, 2159, 2235, 2313, - 2324, 2337, 2348, 2361, 2372, 2419, 2466, 2468, - 2470, 2483, 2485, 2498, 2500, 2578, 2656, 2732, - 2827, 2922, 2998, 3094, 3096, 3192, 3268, 3348, - 3350, 3445, 3521, 3597, 3677, 3679, 3774, 3850, - 3965, 3990, 4015, 4040 + 1108, 1203, 1298, 1374, 1470, 1566, 1568, 1664, + 1759, 1854, 1949, 2025, 2103, 2179, 2255, 2331, + 2409, 2420, 2433, 2444, 2457, 2468, 2515, 2562, + 2564, 2566, 2579, 2581, 2594, 2596, 2674, 2752, + 2828, 2923, 3018, 3094, 3190, 3286, 3288, 3384, + 3460, 3540, 3542, 3637, 3713, 3789, 3869, 3871, + 3966, 4042, 4157, 4182, 4207, 4232 }; static const char _smtp_addr_parser_indicies[] = { @@ -230,309 +230,333 @@ static const char _smtp_addr_parser_indicies[] = { 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 1, 38, - 1, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, - 1, 39, 40, 39, 39, 39, 39, 39, - 1, 1, 39, 39, 1, 1, 1, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 1, 1, 1, 39, 41, 39, - 42, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 1, 1, 1, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 1, - 43, 1, 43, 43, 43, 43, 43, 1, - 1, 43, 43, 1, 1, 44, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 1, 1, 1, 43, 1, 43, 45, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 1, 1, 1, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 1, 43, - 1, 43, 43, 43, 43, 43, 1, 1, - 43, 43, 1, 1, 1, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 1, 1, 1, 43, 1, 43, 1, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 1, 1, 1, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 1, 46, 46, + 38, 39, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 40, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 1, 41, + 1, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 1, 42, 43, 42, 42, 42, 42, 42, + 1, 1, 42, 42, 1, 1, 1, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 1, 1, 1, 42, 44, 42, + 45, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 1, 1, 1, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 1, + 46, 1, 46, 46, 46, 46, 46, 1, + 1, 46, 46, 1, 1, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 1, 1, 1, 1, 1, 1, 1, 46, + 46, 1, 1, 1, 46, 1, 46, 48, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 47, 1, 1, 1, 1, 1, 46, + 46, 46, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 1, 48, 1, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 1, 1, - 1, 1, 50, 1, 1, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 1, - 1, 1, 1, 51, 1, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 1, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 1, 1, 1, 1, 1, 1, - 1, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, + 46, 46, 46, 46, 46, 46, 1, 46, + 1, 46, 46, 46, 46, 46, 1, 1, + 46, 46, 1, 1, 1, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 1, 1, 1, 46, 1, 46, 1, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 1, 1, 1, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 1, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 1, 1, 1, 1, 1, - 1, 49, 49, 49, 49, 49, 49, 49, + 1, 1, 1, 1, 1, 1, 1, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 1, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 1, 1, - 1, 1, 1, 1, 1, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 50, 1, 1, 1, 1, 1, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 1, - 1, 1, 1, 51, 1, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 1, + 49, 1, 51, 1, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 1, 1, + 1, 1, 53, 1, 1, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 1, + 1, 1, 1, 54, 1, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 1, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 1, 1, 1, 1, 1, 1, - 1, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 1, 1, 1, 1, 54, - 1, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 1, 55, 1, 56, 56, + 1, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 1, 1, 1, 1, 1, + 1, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 1, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 1, 1, + 1, 1, 1, 1, 1, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 1, + 1, 1, 1, 54, 1, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 1, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 1, 1, 1, 1, 1, 1, + 1, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 57, 1, 1, 1, 1, 1, 1, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 1, 1, 1, 1, 59, 1, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 1, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 1, 61, 1, 62, - 62, 62, 62, 62, 62, 62, 62, 62, - 62, 1, 63, 63, 63, 63, 63, 63, + 56, 56, 56, 1, 1, 1, 1, 57, + 1, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 1, 58, 1, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 60, 1, 1, 1, 1, 1, 1, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 1, 1, 1, 1, 62, 1, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 1, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 1, 64, 1, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 1, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 1, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 1, + 66, 66, 66, 66, 1, 67, 1, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 1, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 1, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 68, 1, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 1, 1, + 1, 1, 71, 1, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 68, 1, 68, 1, 70, 1, 64, - 1, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 1, 64, 1, 61, 1, - 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 1, 61, 1, 55, 1, 73, - 73, 73, 73, 73, 73, 73, 73, 73, - 73, 57, 1, 1, 1, 1, 1, 1, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 1, 1, 1, 1, 59, 1, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 1, 55, 1, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 57, - 1, 1, 1, 1, 1, 1, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 1, 1, 1, 1, 59, 1, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 1, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 57, 1, 1, 1, 1, - 1, 1, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 1, 1, 1, 1, - 59, 1, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 1, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 1, - 1, 1, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 1, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 1, 1, - 68, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 1, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 1, 1, 1, - 1, 1, 1, 1, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 1, 1, - 1, 1, 59, 1, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 1, 75, - 75, 76, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, + 1, 71, 1, 71, 1, 73, 1, 67, + 1, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 1, 67, 1, 64, 1, 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 77, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 1, 78, - 1, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 1, 1, 1, 1, - 1, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 1, 1, 1, - 1, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 80, 1, 42, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 81, 1, 1, 1, 1, - 1, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 1, 1, 1, - 82, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 42, 1, 39, - 40, 39, 39, 39, 39, 39, 1, 1, - 39, 39, 1, 1, 1, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 1, 1, 1, 39, 1, 39, 1, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 1, 1, 1, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 1, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 1, 1, 1, 1, 1, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 1, 1, 1, 1, 82, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 1, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 1, 1, 1, 1, - 1, 1, 1, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 1, 1, 1, - 1, 1, 1, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 1, 84, 1, - 5, 1, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 85, 1, 1, 1, - 1, 1, 1, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 1, 1, 1, - 1, 86, 1, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 1, 5, 1, - 2, 3, 2, 2, 2, 2, 2, 1, - 1, 2, 2, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 2, 1, 2, 1, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 1, 1, 1, 1, 1, 1, 1, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 1, 1, 1, 1, 86, 1, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 1, 87, 87, 87, 87, 87, + 75, 75, 1, 64, 1, 58, 1, 76, + 76, 76, 76, 76, 76, 76, 76, 76, + 76, 60, 1, 1, 1, 1, 1, 1, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 1, 1, 1, 1, 62, 1, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 1, 58, 1, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 60, + 1, 1, 1, 1, 1, 1, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 1, 1, 1, 1, 62, 1, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 1, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 60, 1, 1, 1, 1, + 1, 1, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 1, 1, 1, 1, + 62, 1, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 1, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 1, + 1, 1, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 1, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 1, 1, + 71, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 1, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 1, 1, 1, + 1, 1, 1, 1, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 1, 1, + 1, 1, 62, 1, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 1, 78, + 78, 79, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 80, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 1, 81, + 81, 82, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 83, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 1, 84, + 1, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 1, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 1, 1, 1, 1, 1, + 1, 1, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 1, 1, 1, 1, + 1, 1, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 1, 86, 1, 87, + 1, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 88, 1, 1, 1, 1, + 1, 1, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 1, 1, 1, 1, + 89, 1, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 1, 87, 1, 90, + 91, 90, 90, 90, 90, 90, 1, 1, + 90, 90, 1, 1, 1, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 1, 1, 1, 90, 1, 90, 1, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 1, 1, 1, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 1, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 1, 1, 1, 1, 1, 1, 1, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 1, 1, 1, 1, 89, 1, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 1, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 1, 1, 1, 1, + 1, 1, 1, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 1, 1, 1, + 1, 1, 1, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 1, 93, 1, + 94, 1, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 95, 1, 1, 1, + 1, 1, 1, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 1, 1, 1, + 1, 96, 1, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 1, 94, 1, + 97, 98, 97, 97, 97, 97, 97, 1, + 1, 97, 97, 1, 1, 1, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, + 97, 1, 1, 1, 97, 1, 97, 1, + 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 1, 1, 1, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 1, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 1, 1, 1, 1, 1, 1, 1, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 1, 1, 1, 1, 96, 1, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 1, 99, 99, 99, 99, 99, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 87, 1, 1, 1, 1, 1, + 1, 1, 99, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 88, 1, 11, 11, 11, 11, 11, 11, + 100, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1, 1, 1, 1, 1, 1, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, @@ -541,50 +565,54 @@ static const char _smtp_addr_parser_indicies[] = { 1, 12, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 1, 89, 89, - 89, 89, 89, 1, 1, 1, 1, 1, + 11, 11, 11, 11, 11, 1, 101, 101, + 101, 101, 101, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 89, 1, 90, - 90, 90, 90, 90, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 101, 1, 102, + 102, 102, 102, 102, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 90, 1, - 91, 91, 91, 91, 91, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 102, 1, + 103, 103, 103, 103, 103, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 91, - 1, 92, 92, 92, 92, 92, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 103, + 1, 104, 104, 104, 104, 104, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 92, 1, 0 + 104, 1, 0 }; static const char _smtp_addr_parser_trans_targs[] = { - 1, 0, 2, 27, 30, 66, 2, 3, - 4, 71, 7, 71, 6, 8, 23, 26, + 1, 0, 2, 27, 31, 68, 2, 3, + 4, 73, 7, 73, 6, 8, 23, 26, 9, 21, 24, 23, 26, 10, 11, 19, - 12, 13, 17, 14, 15, 73, 16, 18, - 20, 22, 25, 27, 28, 29, 4, 31, - 58, 75, 61, 31, 32, 33, 34, 37, - 35, 34, 74, 36, 38, 54, 57, 39, - 52, 55, 54, 57, 40, 41, 50, 42, - 43, 48, 44, 45, 47, 46, 74, 49, - 51, 53, 56, 58, 59, 60, 33, 62, - 63, 64, 65, 67, 68, 69, 70, 72, - 5, 72, 72, 72, 72 + 12, 13, 17, 14, 15, 75, 16, 18, + 20, 22, 25, 28, 29, 30, 28, 29, + 30, 4, 32, 59, 77, 63, 32, 33, + 34, 35, 38, 36, 35, 76, 37, 39, + 55, 58, 40, 53, 56, 55, 58, 41, + 42, 51, 43, 44, 49, 45, 46, 48, + 47, 76, 50, 52, 54, 57, 60, 61, + 62, 60, 61, 62, 34, 64, 65, 63, + 66, 67, 32, 59, 69, 70, 68, 71, + 72, 2, 27, 74, 5, 74, 74, 74, + 74 }; static const char _smtp_addr_parser_trans_actions[] = { - 0, 0, 1, 1, 0, 0, 0, 0, - 2, 3, 0, 0, 0, 4, 4, 4, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 1, - 1, 0, 0, 0, 0, 2, 3, 0, - 0, 0, 7, 0, 4, 4, 4, 0, + 0, 0, 1, 2, 0, 2, 0, 0, + 3, 4, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 8, - 0, 0, 9, 10, 11 + 0, 0, 0, 0, 0, 6, 0, 0, + 0, 0, 0, 7, 8, 7, 0, 3, + 0, 9, 10, 11, 0, 11, 0, 0, + 3, 4, 0, 0, 0, 12, 0, 5, + 5, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6, + 0, 13, 0, 0, 0, 0, 7, 8, + 7, 0, 3, 0, 9, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, + 0, 7, 0, 14, 0, 0, 15, 16, + 17 }; static const char _smtp_addr_parser_eof_actions[] = { @@ -596,18 +624,18 @@ static const char _smtp_addr_parser_eof_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8, - 0, 9, 10, 11 + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 14, 0, 15, 16, 17 }; static const int smtp_addr_parser_start = 1; -static const int smtp_addr_parser_first_final = 71; +static const int smtp_addr_parser_first_final = 73; static const int smtp_addr_parser_error = 0; static const int smtp_addr_parser_en_main = 1; -#line 60 "src/ragel/smtp_addr_parser.rl" +#line 79 "src/ragel/smtp_addr_parser.rl" static int rspamd_smtp_addr_parse (const char *data, size_t len, struct rspamd_email_address *addr) @@ -622,14 +650,14 @@ rspamd_smtp_addr_parse (const char *data, size_t len, struct rspamd_email_addres eof = pe; -#line 626 "src/libmime/parsers/smtp_addr_parser.c" +#line 654 "src/libmime/parsers/smtp_addr_parser.c" { cs = smtp_addr_parser_start; } -#line 74 "src/ragel/smtp_addr_parser.rl" +#line 93 "src/ragel/smtp_addr_parser.rl" -#line 633 "src/libmime/parsers/smtp_addr_parser.c" +#line 661 "src/libmime/parsers/smtp_addr_parser.c" { int _slen; int _trans; @@ -654,44 +682,35 @@ _resume: goto _again; switch ( _smtp_addr_parser_trans_actions[_trans] ) { - case 1: + case 7: #line 5 "src/ragel/smtp_addr_parser.rl" { addr->user = p; - addr->addr = p; } break; - case 2: -#line 10 "src/ragel/smtp_addr_parser.rl" + case 3: +#line 9 "src/ragel/smtp_addr_parser.rl" { if (addr->user) { addr->user_len = p - addr->user; } } break; - case 3: -#line 16 "src/ragel/smtp_addr_parser.rl" + case 4: +#line 15 "src/ragel/smtp_addr_parser.rl" { addr->domain = p; } break; - case 7: -#line 20 "src/ragel/smtp_addr_parser.rl" - { - if (addr->domain) { - addr->domain_len = p - addr->domain; - } - } - break; - case 4: -#line 26 "src/ragel/smtp_addr_parser.rl" + case 5: +#line 25 "src/ragel/smtp_addr_parser.rl" { addr->domain = p; addr->flags |= RSPAMD_EMAIL_ADDR_IP; } break; - case 5: -#line 31 "src/ragel/smtp_addr_parser.rl" + case 6: +#line 30 "src/ragel/smtp_addr_parser.rl" { if (addr->domain) { addr->domain_len = p - addr->domain; @@ -699,57 +718,131 @@ _resume: } break; case 9: -#line 46 "src/ragel/smtp_addr_parser.rl" +#line 36 "src/ragel/smtp_addr_parser.rl" + { + addr->flags |= RSPAMD_EMAIL_ADDR_QUOTED; + } + break; + case 16: +#line 47 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; - case 8: -#line 20 "src/ragel/smtp_addr_parser.rl" + case 11: +#line 51 "src/ragel/smtp_addr_parser.rl" { - if (addr->domain) { - addr->domain_len = p - addr->domain; - } + addr->addr = p; } -#line 46 "src/ragel/smtp_addr_parser.rl" + break; + case 2: +#line 55 "src/ragel/smtp_addr_parser.rl" { - addr->flags |= RSPAMD_EMAIL_ADDR_VALID; + addr->addr = p; } break; - case 6: -#line 37 "src/ragel/smtp_addr_parser.rl" + case 13: +#line 59 "src/ragel/smtp_addr_parser.rl" { - addr->flags |= RSPAMD_EMAIL_ADDR_QUOTED; + addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; + if (addr->addr) { + addr->addr_len = p - addr->addr; + } } -#line 10 "src/ragel/smtp_addr_parser.rl" + break; + case 8: +#line 5 "src/ragel/smtp_addr_parser.rl" + { + addr->user = p; + } +#line 9 "src/ragel/smtp_addr_parser.rl" { if (addr->user) { addr->user_len = p - addr->user; } } break; - case 11: -#line 41 "src/ragel/smtp_addr_parser.rl" + case 12: +#line 19 "src/ragel/smtp_addr_parser.rl" + { + if (addr->domain) { + addr->domain_len = p - addr->domain; + } + } +#line 59 "src/ragel/smtp_addr_parser.rl" + { + addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; + if (addr->addr) { + addr->addr_len = p - addr->addr; + } + } + break; + case 17: +#line 40 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_EMPTY; addr->addr = ""; + addr->user = addr->addr; + addr->domain = addr->addr; } -#line 46 "src/ragel/smtp_addr_parser.rl" +#line 47 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; case 10: -#line 50 "src/ragel/smtp_addr_parser.rl" +#line 51 "src/ragel/smtp_addr_parser.rl" + { + addr->addr = p; + } +#line 5 "src/ragel/smtp_addr_parser.rl" + { + addr->user = p; + } + break; + case 1: +#line 55 "src/ragel/smtp_addr_parser.rl" + { + addr->addr = p; + } +#line 5 "src/ragel/smtp_addr_parser.rl" + { + addr->user = p; + } + break; + case 15: +#line 66 "src/ragel/smtp_addr_parser.rl" + { + addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; + if (addr->addr) { + addr->addr_len = p - addr->addr; + } + } +#line 47 "src/ragel/smtp_addr_parser.rl" + { + addr->flags |= RSPAMD_EMAIL_ADDR_VALID; + } + break; + case 14: +#line 19 "src/ragel/smtp_addr_parser.rl" + { + if (addr->domain) { + addr->domain_len = p - addr->domain; + } + } +#line 66 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; + if (addr->addr) { + addr->addr_len = p - addr->addr; + } } -#line 46 "src/ragel/smtp_addr_parser.rl" +#line 47 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; -#line 753 "src/libmime/parsers/smtp_addr_parser.c" +#line 846 "src/libmime/parsers/smtp_addr_parser.c" } _again: @@ -761,53 +854,65 @@ _again: if ( p == eof ) { switch ( _smtp_addr_parser_eof_actions[cs] ) { - case 9: -#line 46 "src/ragel/smtp_addr_parser.rl" + case 16: +#line 47 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; - case 8: -#line 20 "src/ragel/smtp_addr_parser.rl" + case 17: +#line 40 "src/ragel/smtp_addr_parser.rl" { - if (addr->domain) { - addr->domain_len = p - addr->domain; - } + addr->flags |= RSPAMD_EMAIL_ADDR_EMPTY; + addr->addr = ""; + addr->user = addr->addr; + addr->domain = addr->addr; } -#line 46 "src/ragel/smtp_addr_parser.rl" +#line 47 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; - case 11: -#line 41 "src/ragel/smtp_addr_parser.rl" + case 15: +#line 66 "src/ragel/smtp_addr_parser.rl" { - addr->flags |= RSPAMD_EMAIL_ADDR_EMPTY; - addr->addr = ""; + addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; + if (addr->addr) { + addr->addr_len = p - addr->addr; + } } -#line 46 "src/ragel/smtp_addr_parser.rl" +#line 47 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; - case 10: -#line 50 "src/ragel/smtp_addr_parser.rl" + case 14: +#line 19 "src/ragel/smtp_addr_parser.rl" + { + if (addr->domain) { + addr->domain_len = p - addr->domain; + } + } +#line 66 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; + if (addr->addr) { + addr->addr_len = p - addr->addr; + } } -#line 46 "src/ragel/smtp_addr_parser.rl" +#line 47 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; -#line 804 "src/libmime/parsers/smtp_addr_parser.c" +#line 909 "src/libmime/parsers/smtp_addr_parser.c" } } _out: {} } -#line 75 "src/ragel/smtp_addr_parser.rl" +#line 94 "src/ragel/smtp_addr_parser.rl" return cs; } diff --git a/src/ragel/smtp_addr_parser.rl b/src/ragel/smtp_addr_parser.rl index 5d08d7d4f..64e1ae4fb 100644 --- a/src/ragel/smtp_addr_parser.rl +++ b/src/ragel/smtp_addr_parser.rl @@ -4,7 +4,6 @@ action User_start { addr->user = p; - addr->addr = p; } action User_end { @@ -41,14 +40,34 @@ action Empty_addr { addr->flags |= RSPAMD_EMAIL_ADDR_EMPTY; addr->addr = ""; + addr->user = addr->addr; + addr->domain = addr->addr; } action Valid_addr { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } - action Angled_addr { + action Angled_addr_start { + addr->addr = p; + } + + action Unangled_addr_start { + addr->addr = p; + } + + action Angled_addr_end { + addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; + if (addr->addr) { + addr->addr_len = p - addr->addr; + } + } + + action Unangled_addr_end { addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; + if (addr->addr) { + addr->addr_len = p - addr->addr; + } } include smtp_address "smtp_address.rl"; diff --git a/src/ragel/smtp_address.rl b/src/ragel/smtp_address.rl index c0333acd9..3c2a86ee6 100644 --- a/src/ragel/smtp_address.rl +++ b/src/ragel/smtp_address.rl @@ -25,8 +25,8 @@ Dot_string = Atom ("." Atom)*; QcontentSMTP = qtextSMTP | quoted_pairSMTP; - Quoted_string = ( DQUOTE QcontentSMTP* DQUOTE ) %Quoted_addr; - Local_part = ( Dot_string | Quoted_string ) >User_start %User_end; + Quoted_string = ( DQUOTE QcontentSMTP* >User_start %User_end DQUOTE ) %Quoted_addr; + Local_part = Dot_string >User_start %User_end | Quoted_string; String = Atom | Quoted_string; Standardized_tag = Ldh_str; @@ -43,8 +43,8 @@ Mailbox = Local_part "@" (address_literal | Domain >Domain_start %Domain_end); UnangledPath = ( Adl ":" )? Mailbox; - AngledPath = "<" UnangledPath ">"; - Path = AngledPath %Angled_addr | UnangledPath; + AngledPath = "<" UnangledPath >Angled_addr_start %Angled_addr_end ">"; + Path = AngledPath | UnangledPath >Unangled_addr_start %Unangled_addr_end; SMTPAddr = space* (Path | "<>" %Empty_addr ) %Valid_addr space*; }%%