]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: test-http-header-parser makes sure the parser works one byte at a time.
authorTimo Sirainen <tss@iki.fi>
Thu, 11 Jul 2013 06:33:13 +0000 (09:33 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 11 Jul 2013 06:33:13 +0000 (09:33 +0300)
src/lib-http/test-http-header-parser.c

index 9215455aea76b45d950d445d7d5a63e718f5c570..d6a1af24e2ad68198a9168b9d6ca748c4f8a386d 100644 (file)
@@ -127,20 +127,28 @@ static void test_http_header_parse_valid(void)
                const unsigned char *field_data;
                size_t field_size;
                int ret;
-               int j;
+               unsigned int j, pos, header_len;
 
                header = valid_header_parse_tests[i].header;
-               input = i_stream_create_from_data(header, strlen(header));
+               header_len = strlen(header);
+               input = test_istream_create_data(header, header_len);
                parser = http_header_parser_init(input);
 
                test_begin(t_strdup_printf("http header valid [%d]", i));
 
-               j = 0;
+               j = 0; pos = 0; test_istream_set_size(input, 0);
                while ((ret=http_header_parse_next_field
-                       (parser, &field_name, &field_data, &field_size, &error)) > 0) {
+                       (parser, &field_name, &field_data, &field_size, &error)) >= 0) {
                        const struct http_header_parse_result *result;
                        const char *field_value;
 
+                       if (ret == 0) {
+                               if (pos == header_len)
+                                       break;
+                               test_istream_set_size(input, ++pos);
+                               continue;
+                       }
+
                        if (field_name == NULL) break;
 
                        result = &valid_header_parse_tests[i].fields[j];