From 9afcb337ada91f87aa1a566ec3feba1a12bc9287 Mon Sep 17 00:00:00 2001
From: Přemysl Janouch
Date: Mon, 6 Feb 2017 19:45:03 +0100
Subject: 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;
}
--
cgit v1.2.3-70-g09d2