From 5062696f630b8a82e06ed5cb7025ecd9516a9deb Mon Sep 17 00:00:00 2001 From: Alex Hultman Date: Fri, 7 Oct 2022 13:50:27 +0200 Subject: [PATCH] Barely make it parse trailers --- src/ChunkedEncoding.h | 20 ++++++++++++++++++++ tests/ChunkedEncoding.cpp | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ChunkedEncoding.h b/src/ChunkedEncoding.h index 4ed8031..435ea7b 100644 --- a/src/ChunkedEncoding.h +++ b/src/ChunkedEncoding.h @@ -81,9 +81,29 @@ namespace uWS { while (data.length()) { + // if in "drop trailer mode", just drop up to what we have as size + if ((state & STATE_IS_CHUNKED) && hasChunkSize(state) && chunkSize(state)) { + + while(data.length() && chunkSize(state)) { + //printf("dropping 1 byte of trailer\n"); + data.remove_prefix(1); + decChunkSize(state, 1); + + if (chunkSize(state) == 0) { + //printf("dropped the whole trailer\n"); + state = 0; + } + } + continue; + } + if (!hasChunkSize(state)) { consumeHexNumber(data, state); if (hasChunkSize(state) && chunkSize(state) == 2) { + + // set trailer state and increase size to 4 + state = 4 | STATE_IS_CHUNKED | STATE_HAS_SIZE; + cb(std::string_view(nullptr, 0)); } continue; diff --git a/tests/ChunkedEncoding.cpp b/tests/ChunkedEncoding.cpp index 96230ea..8bec0a1 100644 --- a/tests/ChunkedEncoding.cpp +++ b/tests/ChunkedEncoding.cpp @@ -28,7 +28,7 @@ void runTest(unsigned int maxConsume) { // every null chunk is followed by an empty trailer if (chunk.length() == 0) { - //ss << "\r\n"; + ss << "\r\n"; } }