[dovecot/f17] do not crash during mail search (#861742)
Michal Hlavinka
mhlavink at fedoraproject.org
Tue Nov 20 14:00:49 UTC 2012
commit d64c79fd2c4e6119c18bb12db7330e9382528487
Author: Michal Hlavinka <mhlavink at redhat.com>
Date: Tue Nov 20 15:00:42 2012 +0100
do not crash during mail search (#861742)
dovecot-2.1.10-cmt0306792cc843.patch | 102 ++++++++++++++++++++++++++++++++++
dovecot.spec | 7 ++-
2 files changed, 108 insertions(+), 1 deletions(-)
---
diff --git a/dovecot-2.1.10-cmt0306792cc843.patch b/dovecot-2.1.10-cmt0306792cc843.patch
new file mode 100644
index 0000000..280bc5d
--- /dev/null
+++ b/dovecot-2.1.10-cmt0306792cc843.patch
@@ -0,0 +1,102 @@
+
+# HG changeset patch
+# User Timo Sirainen <tss at iki.fi>
+# Date 1349385301 -10800
+# Node ID 0306792cc843e05eec94e74fcde20ab594acb776
+# Parent 28be06dbd65eac7be8c0c87c6c552aa6ef2d95d4
+lib-storage: Don't crash when searching multiple keywords.
+Fixed by simply removing the keyword merging code.
+mail_search_args_simplify() is called before mail_search_args_init(), so the
+keywords are still NULL and merging can't be done. Alternative fix would
+have been to add string array to mail_search_arg.value containing the
+keywords, but all of this is a pretty unnecessary optimization.
+
+diff -r 28be06dbd65e -r 0306792cc843 src/lib-storage/mail-search.c
+--- a/src/lib-storage/mail-search.c Wed Oct 03 05:43:27 2012 +0300
++++ b/src/lib-storage/mail-search.c Fri Oct 05 00:15:01 2012 +0300
+@@ -586,48 +586,14 @@
+ return TRUE;
+ }
+
+-static struct mail_keywords *
+-mail_search_keywords_merge(struct mailbox *box,
+- struct mail_keywords **_kw1,
+- struct mail_keywords **_kw2)
+-{
+- struct mail_keywords *kw1 = *_kw1, *kw2 = *_kw2;
+- struct mail_keywords *new_kw;
+-
+- i_assert(kw1->index == kw2->index);
+- T_BEGIN {
+- ARRAY_TYPE(keyword_indexes) new_indexes;
+- unsigned int i, j;
+-
+- t_array_init(&new_indexes, kw1->count + kw2->count + 1);
+- array_append(&new_indexes, kw1->idx, kw1->count);
+- for (i = 0; i < kw2->count; i++) {
+- /* don't add duplicates */
+- for (j = 0; j < kw1->count; j++) {
+- if (kw1->idx[j] == kw2->idx[i])
+- break;
+- }
+- if (j == kw1->count)
+- array_append(&new_indexes, kw2->idx+i, 1);
+- }
+- new_kw = mailbox_keywords_create_from_indexes(box,
+- &new_indexes);
+- } T_END;
+- mailbox_keywords_unref(_kw1);
+- mailbox_keywords_unref(_kw2);
+- return new_kw;
+-}
+-
+ static void
+ mail_search_args_simplify_sub(struct mailbox *box,
+ struct mail_search_arg *args, bool parent_and)
+ {
+ struct mail_search_arg *sub, *prev = NULL;
+ struct mail_search_arg *prev_flags_arg, *prev_not_flags_arg;
+- struct mail_search_arg *prev_kw_arg, *prev_not_kw_arg;
+
+ prev_flags_arg = prev_not_flags_arg = NULL;
+- prev_kw_arg = prev_not_kw_arg = NULL;
+ while (args != NULL) {
+ if (args->match_not && (args->type == SEARCH_SUB ||
+ args->type == SEARCH_OR)) {
+@@ -689,35 +655,6 @@
+ }
+ }
+
+- /* merge all keywords arguments */
+- if (args->type == SEARCH_KEYWORDS &&
+- !args->match_not && parent_and) {
+- if (prev_kw_arg == NULL)
+- prev_kw_arg = args;
+- else {
+- prev_kw_arg->value.keywords =
+- mail_search_keywords_merge(box,
+- &prev_kw_arg->value.keywords,
+- &args->value.keywords);
+- prev->next = args->next;
+- args = args->next;
+- continue;
+- }
+- } else if (args->type == SEARCH_KEYWORDS &&
+- args->match_not && !parent_and) {
+- if (prev_not_kw_arg == NULL)
+- prev_not_kw_arg = args;
+- else {
+- prev_not_kw_arg->value.keywords =
+- mail_search_keywords_merge(box,
+- &prev_not_kw_arg->value.keywords,
+- &args->value.keywords);
+- prev->next = args->next;
+- args = args->next;
+- continue;
+- }
+- }
+-
+ prev = args;
+ args = args->next;
+ }
+
diff --git a/dovecot.spec b/dovecot.spec
index 506fd29..21e1be1 100644
--- a/dovecot.spec
+++ b/dovecot.spec
@@ -3,7 +3,7 @@ Name: dovecot
Epoch: 1
Version: 2.1.10
#global prever .rc6
-Release: 3%{?dist}
+Release: 4%{?dist}
#dovecot itself is MIT, a few sources are PD, pigeonhole is LGPLv2
License: MIT and LGPLv2
Group: System Environment/Daemons
@@ -33,6 +33,7 @@ Patch5: dovecot-2.1-privatetmp.patch
#wait for network
Patch6: dovecot-2.1.10-waitonline.patch
+Patch7: dovecot-2.1.10-cmt0306792cc843.patch
Source15: prestartscript
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -125,6 +126,7 @@ This package provides the development files for dovecot.
#disable privatetmp for F17- rhbz#843116
#%patch5 -p1 -b .privatetmp
%patch6 -p1 -b .waitonline
+%patch7 -p1 -b .cmt0306792cc843
sed -i '/DEFAULT_INCLUDES *=/s|$| '"$(pkg-config --cflags libclucene-core)|" src/plugins/fts-lucene/Makefile.in
%build
@@ -446,6 +448,9 @@ make check
%{_libdir}/%{name}/dict/libdriver_pgsql.so
%changelog
+* Tue Nov 20 2012 Michal Hlavinka <mhlavink at redhat.com> - 1:2.1.10-4
+- do not crash during mail search (#861742)
+
* Thu Nov 08 2012 Michal Hlavinka <mhlavink at redhat.com> - 1:2.1.10-3
- fix network still not ready race condition (#871623)
More information about the scm-commits
mailing list