# HG changeset patch # User Timo Sirainen # Date 1287168651 -3600 # Node ID 0d689c112c6e69808f130aae1d73893a688f90a9 # Parent 9dd776345b22b42203c0e0becd7f04559ace794d istream-header-filter: Assert-crash if headers aren't given sorted. diff -r 9dd776345b22 -r 0d689c112c6e src/lib-mail/istream-header-filter.c --- a/src/lib-mail/istream-header-filter.c Fri Oct 15 19:40:06 2010 +0100 +++ b/src/lib-mail/istream-header-filter.c Fri Oct 15 19:50:51 2010 +0100 @@ -509,8 +509,11 @@ mstream->headers = headers_count == 0 ? NULL : p_new(mstream->pool, const char *, headers_count); - for (i = 0; i < headers_count; i++) + 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]); + } mstream->headers_count = headers_count; mstream->hdr_buf = buffer_create_dynamic(mstream->pool, 1024); diff -r 9dd776345b22 -r 0d689c112c6e src/lib-mail/test-istream-header-filter.c --- a/src/lib-mail/test-istream-header-filter.c Fri Oct 15 19:40:06 2010 +0100 +++ b/src/lib-mail/test-istream-header-filter.c Fri Oct 15 19:50:51 2010 +0100 @@ -18,8 +18,8 @@ static void test_istream_filter(void) { - static const char *exclude_headers[] = { "To", NULL }; - const char *input = "From: foo\nFrom: abc\nTo: bar\n\nhello world\n"; + static const char *exclude_headers[] = { "Subject", "To", NULL }; + const char *input = "From: foo\nFrom: abc\nTo: bar\nSubject: plop\n\nhello world\n"; const char *output = "From: abc\n\nhello world\n"; struct istream *istream, *filter, *filter2; unsigned int i, input_len = strlen(input); @@ -32,12 +32,12 @@ filter = i_stream_create_header_filter(istream, HEADER_FILTER_EXCLUDE | HEADER_FILTER_NO_CR, - exclude_headers, 1, + exclude_headers, 2, filter_callback, NULL); filter2 = i_stream_create_header_filter(filter, HEADER_FILTER_EXCLUDE | HEADER_FILTER_NO_CR, - exclude_headers, 1, + exclude_headers, 2, null_header_filter_callback, NULL); i_stream_unref(&filter); filter = filter2;