]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
message address parser: Set invalid_syntax=TRUE if the input is invalid.
authorTimo Sirainen <tss@iki.fi>
Sun, 7 Sep 2008 14:59:22 +0000 (17:59 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 7 Sep 2008 14:59:22 +0000 (17:59 +0300)
--HG--
branch : HEAD

src/lib-mail/message-address.c
src/lib-mail/message-address.h

index c3cfbc747a3a75ff8db0946b879b4583f88a1e8b..4a335a5cfca2760c38e267b10495b9ed78bc6570 100644 (file)
@@ -264,17 +264,24 @@ static int parse_address(struct message_address_parser_context *ctx)
        return ret;
 }
 
-static void parse_address_list(struct message_address_parser_context *ctx,
-                              unsigned int max_addresses)
+static int parse_address_list(struct message_address_parser_context *ctx,
+                             unsigned int max_addresses)
 {
+       int ret = 0;
+
        /* address-list    = (address *("," address)) / obs-addr-list */
-       while (max_addresses-- > 0 && parse_address(ctx) > 0) {
-               if (*ctx->parser.data != ',')
+       while (max_addresses-- > 0) {
+               if ((ret = parse_address(ctx)) <= 0)
+                       break;
+               if (*ctx->parser.data != ',') {
+                       ret = -1;
                        break;
+               }
                ctx->parser.data++;
-               if (rfc822_skip_lwsp(&ctx->parser) <= 0)
+               if ((ret = rfc822_skip_lwsp(&ctx->parser)) <= 0)
                        break;
        }
+       return ret;
 }
 
 static struct message_address *
@@ -292,7 +299,8 @@ message_address_parse_real(pool_t pool, const unsigned char *data, size_t size,
 
        rfc822_skip_lwsp(&ctx.parser);
 
-       (void)parse_address_list(&ctx, max_addresses);
+       if (parse_address_list(&ctx, max_addresses) < 0)
+               ctx.first_addr->invalid_syntax = TRUE;
        return ctx.first_addr;
 }
 
index 0b32cfe58d507a280cd6300365b19c13e60446a5..2769c58d52579de150f9bca2c490287a5720e12e 100644 (file)
@@ -8,6 +8,7 @@ struct message_address {
        struct message_address *next;
 
        const char *name, *route, *mailbox, *domain;
+       bool invalid_syntax;
 };
 
 /* Parse message addresses from given data. If fill_missing is TRUE, missing