From 5c2a636000211cbf65d145c0919600b446338c8b Mon Sep 17 00:00:00 2001 From: cxl Date: Sun, 17 Apr 2016 06:57:41 +0000 Subject: [PATCH] Core: Fixed issue with HttpRequest chunked trailer git-svn-id: svn://ultimatepp.org/upp/trunk@9698 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Core/Http.cpp | 19 ++++++++++++++++++- uppsrc/Core/Inet.h | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/uppsrc/Core/Http.cpp b/uppsrc/Core/Http.cpp index cd649e8ce..3219b63d9 100644 --- a/uppsrc/Core/Http.cpp +++ b/uppsrc/Core/Http.cpp @@ -383,7 +383,7 @@ bool HttpRequest::Do() StartPhase(CHUNK_HEADER); break; case TRAILER: - if(ReadingHeader()) + if(ReadingTrailer()) break; header.ParseAdd(data); Finish(); @@ -665,6 +665,23 @@ bool HttpRequest::ReadingHeader() } } +bool HttpRequest::ReadingTrailer() +{ + for(;;) { + int c = TcpSocket::Get(); + if(c < 0) + return !IsEof(); + else + data.Cat(c); + if(data.GetCount() == 2) { + if(data[0] == '\r' && data[1] == '\n') + return false; + HttpError("Invalid chunk trailer"); + return true; + } + } +} + void HttpRequest::ReadingChunkHeader() { for(;;) { diff --git a/uppsrc/Core/Inet.h b/uppsrc/Core/Inet.h index 4b5652d07..cb7566fe2 100644 --- a/uppsrc/Core/Inet.h +++ b/uppsrc/Core/Inet.h @@ -400,6 +400,7 @@ class HttpRequest : public TcpSocket { bool SendingData(bool request = false); bool ReadingHeader(); + bool ReadingTrailer(); void StartBody(); bool ReadingBody(); void ReadingChunkHeader();