changeset 6889:3ec5a07d00f2 HEAD

Added IMAP_PARSE_FLAG_ATOM_ALLCHARS.
author Timo Sirainen <tss@iki.fi>
date Sun, 02 Dec 2007 12:50:50 +0200
parents 51bf40995f0f
children 0ddc6511e9ff
files src/lib-imap/imap-parser.c src/lib-imap/imap-parser.h
diffstat 2 files changed, 13 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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,
--- 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 {