]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: message parser: Delay allocation of message header.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 4 Feb 2017 13:11:36 +0000 (14:11 +0100)
committerGitLab <gitlab@git.dovecot.net>
Wed, 15 Feb 2017 12:00:16 +0000 (14:00 +0200)
src/lib-http/http-message-parser.c

index 416a5b8d2d0682339cb91b05f8f6c099d0caa7fc..94694fda4c8a1c64bc2ac042be3e7017c29eb747 100644 (file)
@@ -61,7 +61,6 @@ void http_message_parser_restart(struct http_message_parser *parser,
                pool_ref(pool);
        }
        parser->msg.date = (time_t)-1;
-       parser->msg.header = http_header_create(parser->msg.pool, 32);
 }
 
 int http_message_parse_version(struct http_message_parser *parser)
@@ -132,6 +131,8 @@ http_message_parse_header(struct http_message_parser *parser,
        const struct http_header_field *hdr;
        struct http_parser hparser;
 
+       if (parser->msg.header == NULL)
+               parser->msg.header = http_header_create(parser->msg.pool, 32);
        hdr = http_header_field_add(parser->msg.header, name, data, size);
 
        /* RFC 7230, Section 3.2.2: Field Order
@@ -356,6 +357,10 @@ int http_message_parse_headers(struct http_message_parser *parser)
                if (field_name == NULL) {
                        /* EOH */
 
+                       /* Create empty header if there is none */
+                       if (parser->msg.header == NULL)
+                               parser->msg.header = http_header_create(parser->msg.pool, 1);
+
                        /* handle HTTP/1.0 persistence */
                        if (msg->version_major == 1 && msg->version_minor == 0 &&
                                !msg->connection_close) {