This is an automated email from the ASF dual-hosted git repository.
shinrich pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new 4666d5a Add logic to resolve content-length transfer-encoding
conflicts on response (#6992)
4666d5a is described below
commit 4666d5a4ee660a5967de8098e736d87d3226653e
Author: Susan Hinrichs <[email protected]>
AuthorDate: Tue Jul 21 12:54:38 2020 -0500
Add logic to resolve content-length transfer-encoding conflicts on response
(#6992)
---
proxy/hdrs/HTTP.cc | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/proxy/hdrs/HTTP.cc b/proxy/hdrs/HTTP.cc
index c557172..fb703be 100644
--- a/proxy/hdrs/HTTP.cc
+++ b/proxy/hdrs/HTTP.cc
@@ -1252,6 +1252,10 @@ http_parser_parse_resp(HTTPParser *parser, HdrHeap
*heap, HTTPHdrImpl *hh, const
if (err < 0) {
return err;
}
+ // Make sure the length headers are consistent
+ if (err == PARSE_RESULT_DONE) {
+ err = validate_hdr_content_length(heap, hh);
+ }
if ((err == PARSE_RESULT_DONE) || (err == PARSE_RESULT_CONT)) {
return err;
}
@@ -1287,7 +1291,12 @@ http_parser_parse_resp(HTTPParser *parser, HdrHeap
*heap, HTTPHdrImpl *hh, const
end = real_end;
parser->m_parsing_http = false;
- return mime_parser_parse(&parser->m_mime_parser, heap,
hh->m_fields_impl, start, end, must_copy_strings, eof, true);
+ auto ret = mime_parser_parse(&parser->m_mime_parser, heap,
hh->m_fields_impl, start, end, must_copy_strings, eof, true);
+ // Make sure the length headers are consistent
+ if (ret == PARSE_RESULT_DONE) {
+ ret = validate_hdr_content_length(heap, hh);
+ }
+ return ret;
}
#endif
@@ -1402,8 +1411,12 @@ http_parser_parse_resp(HTTPParser *parser, HdrHeap
*heap, HTTPHdrImpl *hh, const
end = real_end;
parser->m_parsing_http = false;
}
-
- return mime_parser_parse(&parser->m_mime_parser, heap, hh->m_fields_impl,
start, end, must_copy_strings, eof, true);
+ auto ret = mime_parser_parse(&parser->m_mime_parser, heap,
hh->m_fields_impl, start, end, must_copy_strings, eof, true);
+ // Make sure the length headers are consistent
+ if (ret == PARSE_RESULT_DONE) {
+ ret = validate_hdr_content_length(heap, hh);
+ }
+ return ret;
}
/*-------------------------------------------------------------------------