# HG changeset patch # User Timo Sirainen # Date 1196592650 -7200 # Node ID 3ec5a07d00f20e6ad0126389bc02ac0e10a2addf # Parent 51bf40995f0ff504a43846dab55dac57b4aefa52 Added IMAP_PARSE_FLAG_ATOM_ALLCHARS. diff -r 51bf40995f0f -r 3ec5a07d00f2 src/lib-imap/imap-parser.c --- a/src/lib-imap/imap-parser.c Sun Dec 02 11:33:36 2007 +0200 +++ b/src/lib-imap/imap-parser.c Sun Dec 02 12:50:50 2007 +0200 @@ -231,15 +231,22 @@ static int is_valid_atom_char(struct imap_parser *parser, char chr) { + const char *error; + if (IS_ATOM_SPECIAL_INPUT((unsigned char)chr)) { - parser->error = "Invalid characters in atom"; + error = "Invalid characters in atom"; return FALSE; } else if ((chr & 0x80) != 0) { - parser->error = "8bit data in atom"; + error = "8bit data in atom"; return FALSE; + } else { + return TRUE; } - return TRUE; + if ((parser->flags & IMAP_PARSE_FLAG_ATOM_ALLCHARS) != 0) + return TRUE; + parser->error = error; + return FALSE; } static int imap_parser_read_atom(struct imap_parser *parser, diff -r 51bf40995f0f -r 3ec5a07d00f2 src/lib-imap/imap-parser.h --- a/src/lib-imap/imap-parser.h Sun Dec 02 11:33:36 2007 +0200 +++ b/src/lib-imap/imap-parser.h Sun Dec 02 12:50:50 2007 +0200 @@ -26,7 +26,9 @@ /* Don't remove '\' chars from string arguments */ IMAP_PARSE_FLAG_NO_UNESCAPE = 0x02, /* Return literals as IMAP_ARG_LITERAL instead of IMAP_ARG_STRING */ - IMAP_PARSE_FLAG_LITERAL_TYPE = 0x04 + IMAP_PARSE_FLAG_LITERAL_TYPE = 0x04, + /* Don't check if atom contains invalid characters */ + IMAP_PARSE_FLAG_ATOM_ALLCHARS = 0x08 }; enum imap_arg_type {