From 9afcb337ada91f87aa1a566ec3feba1a12bc9287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Mon, 6 Feb 2017 19:45:03 +0100 Subject: [PATCH] Fix the WebSocket frame parser --- liberty-proto.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/liberty-proto.c b/liberty-proto.c index 67c5cde..aa996de 100644 --- a/liberty-proto.c +++ b/liberty-proto.c @@ -1275,10 +1275,7 @@ ws_parser_push (struct ws_parser *self, const void *data, size_t len) case WS_PARSER_PAYLOAD: // Move the buffer so that payload data is at the front str_remove_slice (&self->input, 0, unpacker.offset); - - // And continue unpacking frames past the payload msg_unpacker_init (&unpacker, self->input.str, self->input.len); - unpacker.offset = self->payload_len; if (self->input.len < self->payload_len) goto need_data; @@ -1287,6 +1284,8 @@ ws_parser_push (struct ws_parser *self, const void *data, size_t len) if (!self->on_frame (self->user_data, self)) goto fail; + // And continue unpacking frames past the payload + unpacker.offset = self->payload_len; self->state = WS_PARSER_FIXED; break; }