# HG changeset patch # User Timo Sirainen # Date 1287509967 -3600 # Node ID d95510ee0c8ff50fcde9fdfe4822754cab5e5e20 # Parent 0908326bf4b9b268b7085dedc9c2d5b368ab1045 istream-header-filter: Drop duplicate headers instead of assert-crashing with them. 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);