diff -ru dnsdist-1.9.12.orig/ext/yahttp/yahttp/reqresp.cpp dnsdist-1.9.12.CVE-2026-33260/ext/yahttp/yahttp/reqresp.cpp --- dnsdist-1.9.12.orig/ext/yahttp/yahttp/reqresp.cpp 2026-03-13 16:09:16.000000000 +0100 +++ dnsdist-1.9.12.CVE-2026-33260/ext/yahttp/yahttp/reqresp.cpp 2026-04-03 15:32:59.610555029 +0200 @@ -40,7 +40,19 @@ } template - bool AsyncLoader::feed(const std::string& somedata) { + bool AsyncLoader::feed(const std::string& somedata) + { + if (state < 2) { + headersize += somedata.length(); // maye include some body data, we don't know yet... + if (headersize > target->max_header_size) { + if (target->kind == YAHTTP_TYPE_REQUEST) { + throw ParseError("Request header too large"); + } + else { + throw ParseError("Response header too large"); + } + } + } buffer.append(somedata); while(state < 2) { int cr=0; @@ -155,8 +167,8 @@ maxbody = minbody; } if (minbody < 1) return true; // guess there isn't anything left. - if (target->kind == YAHTTP_TYPE_REQUEST && static_cast(minbody) > target->max_request_size) throw ParseError("Max request body size exceeded"); - else if (target->kind == YAHTTP_TYPE_RESPONSE && static_cast(minbody) > target->max_response_size) throw ParseError("Max response body size exceeded"); + if (target->kind == YAHTTP_TYPE_REQUEST && minbody > target->max_request_size) throw ParseError("Max request body size exceeded"); + else if (target->kind == YAHTTP_TYPE_RESPONSE && minbody > target->max_response_size) throw ParseError("Max response body size exceeded"); } if (maxbody == 0) hasBody = false; diff -ru dnsdist-1.9.12.orig/ext/yahttp/yahttp/reqresp.hpp dnsdist-1.9.12.CVE-2026-33260/ext/yahttp/yahttp/reqresp.hpp --- dnsdist-1.9.12.orig/ext/yahttp/yahttp/reqresp.hpp 2026-03-13 16:09:16.000000000 +0100 +++ dnsdist-1.9.12.CVE-2026-33260/ext/yahttp/yahttp/reqresp.hpp 2026-04-03 15:32:59.610621495 +0200 @@ -20,6 +20,10 @@ #include +#ifndef YAHTTP_MAX_HEADER_SIZE +#define YAHTTP_MAX_HEADER_SIZE (100 * 1024) +#endif + #ifndef YAHTTP_MAX_REQUEST_SIZE #define YAHTTP_MAX_REQUEST_SIZE 2097152 #endif @@ -107,6 +111,7 @@ #endif max_request_size = YAHTTP_MAX_REQUEST_SIZE; max_response_size = YAHTTP_MAX_RESPONSE_SIZE; + max_header_size = YAHTTP_MAX_HEADER_SIZE; url = ""; method = ""; statusText = ""; @@ -129,6 +134,7 @@ this->parameters = rhs.parameters; this->getvars = rhs.getvars; this->body = rhs.body; this->max_request_size = rhs.max_request_size; this->max_response_size = rhs.max_response_size; this->version = rhs.version; + this->max_header_size = rhs.max_header_size; #ifdef HAVE_CPP_FUNC_PTR this->renderer = rhs.renderer; #endif @@ -142,6 +148,7 @@ this->parameters = rhs.parameters; this->getvars = rhs.getvars; this->body = rhs.body; this->max_request_size = rhs.max_request_size; this->max_response_size = rhs.max_response_size; this->version = rhs.version; + this->max_header_size = rhs.max_header_size; #ifdef HAVE_CPP_FUNC_PTR this->renderer = rhs.renderer; #endif @@ -165,8 +172,9 @@ std::string body; // renderer; //target = target_; hasBody = false; buffer = ""; + headersize = 0; this->target->initialize(); }; //