changeset 6877:a5a7d38b6df7 HEAD

Don't crash when searching for empty TEXT or BODY.
author Timo Sirainen <tss@iki.fi>
date Thu, 29 Nov 2007 19:38:06 +0200
parents ed6693fc06d6
children 0c3ab0aef33c
files src/imap/imap-search.c
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap/imap-search.c	Thu Nov 29 07:23:48 2007 +0200
+++ b/src/imap/imap-search.c	Thu Nov 29 19:38:06 2007 +0200
@@ -178,6 +178,11 @@
 	case 'B':
 		if (strcmp(str, "BODY") == 0) {
 			/* <string> */
+			if (IMAP_ARG_TYPE_IS_STRING((*args)->type) &&
+			    *IMAP_ARG_STR(*args) == '\0') {
+				*args += 1;
+				return ARG_NEW_FLAG(SEARCH_ALL);
+			}
 			return ARG_NEW(SEARCH_BODY);
 		} else if (strcmp(str, "BEFORE") == 0) {
 			/* <date> */
@@ -327,6 +332,11 @@
 	case 'T':
 		if (strcmp(str, "TEXT") == 0) {
 			/* <string> */
+			if (IMAP_ARG_TYPE_IS_STRING((*args)->type) &&
+			    *IMAP_ARG_STR(*args) == '\0') {
+				*args += 1;
+				return ARG_NEW_FLAG(SEARCH_ALL);
+			}
 			return ARG_NEW(SEARCH_TEXT);
 		} else if (strcmp(str, "TO") == 0) {
 			/* <string> */
@@ -379,9 +389,19 @@
 	case 'X':
 		if (strcmp(str, "X-BODY-FAST") == 0) {
 			/* <string> */
+			if (IMAP_ARG_TYPE_IS_STRING((*args)->type) &&
+			    *IMAP_ARG_STR(*args) == '\0') {
+				*args += 1;
+				return ARG_NEW_FLAG(SEARCH_ALL);
+			}
 			return ARG_NEW(SEARCH_BODY_FAST);
 		} else if (strcmp(str, "X-TEXT-FAST") == 0) {
 			/* <string> */
+			if (IMAP_ARG_TYPE_IS_STRING((*args)->type) &&
+			    *IMAP_ARG_STR(*args) == '\0') {
+				*args += 1;
+				return ARG_NEW_FLAG(SEARCH_ALL);
+			}
 			return ARG_NEW(SEARCH_TEXT_FAST);
 		}
 		break;