dovecot-2.0: istream-header-filter: Drop duplicate headers inste...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Oct 19 20:40:08 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/d95510ee0c8f
changeset: 12306:d95510ee0c8f
user: Timo Sirainen <tss at iki.fi>
date: Tue Oct 19 18:39:27 2010 +0100
description:
istream-header-filter: Drop duplicate headers instead of assert-crashing with them.
diffstat:
src/lib-mail/istream-header-filter.c | 15 ++++++++++-----
1 files changed, 10 insertions(+), 5 deletions(-)
diffs (32 lines):
diff -r 0908326bf4b9 -r d95510ee0c8f src/lib-mail/istream-header-filter.c
--- a/src/lib-mail/istream-header-filter.c Mon Oct 18 19:00:59 2010 +0100
+++ b/src/lib-mail/istream-header-filter.c Tue Oct 19 18:39:27 2010 +0100
@@ -499,7 +499,8 @@
header_filter_callback *callback, void *context)
{
struct header_filter_istream *mstream;
- unsigned int i;
+ unsigned int i, j;
+ int ret;
i_assert((flags & (HEADER_FILTER_INCLUDE|HEADER_FILTER_EXCLUDE)) != 0);
@@ -510,10 +511,14 @@
mstream->headers = headers_count == 0 ? NULL :
p_new(mstream->pool, const char *, headers_count);
- for (i = 0; i < headers_count; i++) {
- i_assert(i == 0 ||
- strcmp(mstream->headers[i-1], headers[i]) < 0);
- mstream->headers[i] = p_strdup(mstream->pool, headers[i]);
+ for (i = j = 0; i < headers_count; i++) {
+ ret = j == 0 ? -1 : strcmp(mstream->headers[j-1], headers[i]);
+ if (ret == 0) {
+ /* drop duplicate */
+ continue;
+ }
+ i_assert(ret < 0);
+ mstream->headers[j++] = p_strdup(mstream->pool, headers[i]);
}
mstream->headers_count = headers_count;
mstream->hdr_buf = buffer_create_dynamic(mstream->pool, 1024);
More information about the dovecot-cvs
mailing list