Browse Source

Fix handling when Content-Length field is absent

Closes #15754.
PR #15757.
adaptive-webui-19844
Chocobo1 3 years ago committed by GitHub
parent
commit
d78b2a569f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 15
      src/base/http/requestparser.cpp

15
src/base/http/requestparser.cpp

@ -109,9 +109,18 @@ RequestParser::ParseResult RequestParser::doParse(const QByteArray &data) @@ -109,9 +109,18 @@ RequestParser::ParseResult RequestParser::doParse(const QByteArray &data)
return {ParseStatus::OK, m_request, headerLength};
if (m_request.method == HEADER_REQUEST_METHOD_POST)
{
bool ok = false;
const int contentLength = m_request.headers[HEADER_CONTENT_LENGTH].toInt(&ok);
if (!ok || (contentLength < 0))
const auto parseContentLength = [this]() -> int
{
// [rfc7230] 3.3.2. Content-Length
const QString rawValue = m_request.headers.value(HEADER_CONTENT_LENGTH);
if (rawValue.isNull()) // `HEADER_CONTENT_LENGTH` does not exist
return 0;
return Utils::String::parseInt(rawValue).value_or(-1);
};
const int contentLength = parseContentLength();
if (contentLength < 0)
{
qWarning() << Q_FUNC_INFO << "bad request: content-length invalid";
return {ParseStatus::BadRequest, Request(), 0};

Loading…
Cancel
Save