From bef9ac1af62efa37a079cdc9ccf18ad84c5403de Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Wed, 8 Mar 2023 18:25:30 +0100 Subject: [PATCH] YaHTTP: Prevent integer overflow on very large chunks If the chunk_size is very close to the maximum value of an integer, we trigger an integer overflow when checking if we have a trailing newline after the payload. Reported by OSS-Fuzz as: https://oss-fuzz.com/testcase-detail/6439610474692608 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56804 (cherry picked from commit b602982fc5b4fb9139dec591541e0c070ceb47f5) --- ext/yahttp/yahttp/reqresp.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ext/yahttp/yahttp/reqresp.cpp b/ext/yahttp/yahttp/reqresp.cpp index dc49cb64f6..e5f9c95ecc 100644 --- a/ext/yahttp/yahttp/reqresp.cpp +++ b/ext/yahttp/yahttp/reqresp.cpp @@ -1,5 +1,7 @@ #include "yahttp.hpp" +#include + namespace YaHTTP { template class AsyncLoader; @@ -177,6 +179,9 @@ namespace YaHTTP { throw ParseError("Unable to parse chunk size"); } if (chunk_size == 0) { state = 3; break; } // last chunk + if (chunk_size > (std::numeric_limits::max() - 2)) { + throw ParseError("Chunk is too large"); + } } else { int crlf=1; if (buffer.size() < static_cast(chunk_size+1)) return false; // expect newline -- 2.47.2