Mercurial > dovecot > original-hg > dovecot-1.2
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;