dovecot: Don't crash when searching for empty TEXT or BODY.

dovecot at dovecot.org dovecot at dovecot.org
Thu Nov 29 19:38:10 EET 2007


details:   http://hg.dovecot.org/dovecot/rev/a5a7d38b6df7
changeset: 6877:a5a7d38b6df7
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Nov 29 19:38:06 2007 +0200
description:
Don't crash when searching for empty TEXT or BODY.

diffstat:

1 file changed, 20 insertions(+)
src/imap/imap-search.c |   20 ++++++++++++++++++++

diffs (47 lines):

diff -r ed6693fc06d6 -r a5a7d38b6df7 src/imap/imap-search.c
--- 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 @@ static bool search_arg_build(struct sear
 	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 @@ static bool search_arg_build(struct sear
 	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 @@ static bool search_arg_build(struct sear
 	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;


More information about the dovecot-cvs mailing list