Fix previous content-length != content-range patch

In the case where no Content-Length header is seen, the content_length
value still should be set based upon the range (same as it would
have been before the patch).
This commit is contained in:
Jon Siwek 2018-05-08 13:25:14 -05:00
parent c0cc4ef192
commit 2e2d086144

View file

@ -42,7 +42,7 @@ HTTP_Entity::HTTP_Entity(HTTP_Message *arg_message, MIME_Entity* parent_entity,
http_message = arg_message; http_message = arg_message;
expect_body = arg_expect_body; expect_body = arg_expect_body;
chunked_transfer_state = NON_CHUNKED_TRANSFER; chunked_transfer_state = NON_CHUNKED_TRANSFER;
content_length = -1; // unspecified content_length = range_length = -1; // unspecified
expect_data_length = 0; expect_data_length = 0;
body_length = 0; body_length = 0;
header_length = 0; header_length = 0;
@ -445,15 +445,21 @@ void HTTP_Entity::SubmitHeader(mime::MIME_Header* h)
is_partial_content = true; is_partial_content = true;
offset = f; offset = f;
range_length = len; range_length = len;
if ( content_length != 0 && content_length != range_length )
{
// Possible evasion attempt.
http_message->Weird("HTTP_range_not_matching_len");
// Take the maximum of both lengths to avoid evasions. if ( content_length > 0 )
if ( range_length > content_length ) {
content_length = range_length; if ( content_length != range_length )
{
// Possible evasion attempt.
http_message->Weird("HTTP_range_not_matching_len");
// Take the maximum of both lengths to avoid evasions.
if ( range_length > content_length )
content_length = range_length;
}
} }
else
content_length = range_length;
} }
else else
{ {