make duplicate headers append instead of get ignored
The code to prevent memory leaks caused by reallocating a wsi->utf8_token
was also causing wsi->parser_state to not be updated, preventing the
handshake from completing.
This patch changes the logic to append to previous allocation which is
correct behaviour actually.
Signed-off-by: Nick Dowell <nick@nickdowell.com>
Signed-off-by: Andy Green <andy@warmcat.com>
diff --git a/lib/parsers.c b/lib/parsers.c
index 120d22a..c3bf7ae 100644
--- a/lib/parsers.c
+++ b/lib/parsers.c
@@ -190,17 +190,18 @@
if (n == WSI_TOKEN_SWORIGIN)
n = WSI_TOKEN_ORIGIN;
- /* check for dupe header -> mem leak... skip dupes */
- if (wsi->utf8_token[WSI_TOKEN_GET_URI + n].token)
- continue;
-
wsi->parser_state = WSI_TOKEN_GET_URI + n;
- wsi->current_alloc_len = LWS_INITIAL_HDR_ALLOC;
- wsi->utf8_token[wsi->parser_state].token =
- malloc(wsi->current_alloc_len);
- wsi->utf8_token[wsi->parser_state].token_len = 0;
n = WSI_TOKEN_COUNT;
+
+ /* If the header has been seen already, just append */
+ if (wsi->utf8_token[wsi->parser_state].token)
+ continue;
+
+ wsi->current_alloc_len = LWS_INITIAL_HDR_ALLOC;
+ wsi->utf8_token[wsi->parser_state].token =
+ malloc(wsi->current_alloc_len);
+ wsi->utf8_token[wsi->parser_state].token_len = 0;
}
/* colon delimiter means we just don't know this name */