]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix SMTP address parsing machine
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 25 Apr 2016 08:40:00 +0000 (09:40 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 25 Apr 2016 08:40:00 +0000 (09:40 +0100)
src/libmime/parsers/smtp_addr_parser.c
src/ragel/smtp_addr_parser.rl
src/ragel/smtp_address.rl

index df623933257d2eb9cfee724028167caf21f60956..f5476054f889f0062b18159607f0b0ab87c39cc9 100644 (file)
@@ -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;
 }
index 5d08d7d4f530a789a74767944da9bf18efe76d33..64e1ae4fb1ba31ddbc7e4f1bd42c1ce5daa51739 100644 (file)
@@ -4,7 +4,6 @@
 
   action User_start {
     addr->user = p;
-    addr->addr = p;
   }
 
   action User_end {
   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";
index c0333acd96a6ea32627e3c1ca7f2e298eff82634..3c2a86ee61d9d4569ff19952cdd2de87f531df94 100644 (file)
@@ -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*;
 
 }%%