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