From 99936745e465a71ca9d684c44883f10b48faa5b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnter=20Obiltschnig?= Date: Thu, 10 Nov 2022 19:12:09 +0100 Subject: [PATCH] #3147: Reading from request stream hangs when "Transfer-Encoding: chunked" is used --- Net/src/HTTPChunkedStream.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Net/src/HTTPChunkedStream.cpp b/Net/src/HTTPChunkedStream.cpp index 413691144..9b5916309 100644 --- a/Net/src/HTTPChunkedStream.cpp +++ b/Net/src/HTTPChunkedStream.cpp @@ -81,9 +81,14 @@ int HTTPChunkedStreamBuf::readFromDevice(char* buffer, std::streamsize length) while (ch != eof && ch != '\n') ch = _session.get(); unsigned chunk; if (NumberParser::tryParseHex(chunkLen, chunk)) + { _chunk = (std::streamsize) chunk; + } else + { + _chunk = -1; return eof; + } } if (_chunk > 0) { @@ -92,7 +97,7 @@ int HTTPChunkedStreamBuf::readFromDevice(char* buffer, std::streamsize length) if (n > 0) _chunk -= n; return n; } - else + else if (_chunk == 0) { int ch = _session.peek(); if (ch != eof && ch != '\r' && ch != '\n') @@ -113,8 +118,10 @@ int HTTPChunkedStreamBuf::readFromDevice(char* buffer, std::streamsize length) ch = _session.get(); while (ch != eof && ch != '\n') ch = _session.get(); } + _chunk = -1; return 0; } + else return eof; }