Mercurial > dovecot > core-2.2
changeset 14979:e0a3812771fd
imap-parser: Allow calling imap_parser_read_args() multiple times with larger count parameter.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 29 Aug 2012 21:04:45 +0300 |
parents | f6a9e6d7e5bd |
children | c73086239699 |
files | src/lib-imap/imap-parser.c |
diffstat | 1 files changed, 9 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-imap/imap-parser.c Wed Aug 29 21:04:09 2012 +0300 +++ b/src/lib-imap/imap-parser.c Wed Aug 29 21:04:45 2012 +0300 @@ -49,6 +49,7 @@ unsigned int literal8:1; unsigned int literal_size_return:1; unsigned int eol:1; + unsigned int args_added_extra_eol:1; unsigned int fatal_error:1; }; @@ -110,6 +111,7 @@ parser->literal_skip_crlf = FALSE; parser->eol = FALSE; + parser->args_added_extra_eol = FALSE; parser->literal_size_return = FALSE; } @@ -624,6 +626,11 @@ arg = array_append_space(&parser->root_list); arg->type = IMAP_ARG_EOL; + if (!parser->eol) + parser->args_added_extra_eol = TRUE; + else + i_assert(!parser->literal_size_return); + *args_r = array_get(&parser->root_list, &count); return ret; } @@ -634,10 +641,11 @@ { parser->flags = flags; - if (parser->literal_size_return) { + if (parser->args_added_extra_eol) { /* delete EOL */ array_delete(&parser->root_list, array_count(&parser->root_list)-1, 1); + parser->args_added_extra_eol = FALSE; parser->literal_size_return = FALSE; }