[ruby/net-http] Update the content-length heading when decoding bodies

Previously, the content-encoding header was removed and the body
was modified, but the content-length header was not modified,
resulting in the content-length header not matching the body
length.

Fixes [Bug #16672]

a7cb30124c
This commit is contained in:
Jeremy Evans 2021-03-01 13:48:06 -08:00 committed by git
parent 651b832c1b
commit 58adb1636b
2 changed files with 25 additions and 0 deletions

View file

@ -263,6 +263,7 @@ class Net::HTTPResponse
case v&.downcase
when 'deflate', 'gzip', 'x-gzip' then
self.delete 'content-encoding'
had_content_length = self.delete 'content-length'
inflate_body_io = Inflater.new(@socket)
@ -272,6 +273,9 @@ class Net::HTTPResponse
ensure
begin
inflate_body_io.finish
if had_content_length
self['content-length'] = inflate_body_io.bytes_inflated.to_s
end
rescue => err
# Ignore #finish's error if there is an exception from yield
raise err if success
@ -373,6 +377,14 @@ class Net::HTTPResponse
@inflate.finish
end
##
# The number of bytes inflated, used to update the Content-Length of
# the response.
def bytes_inflated
@inflate.total_out
end
##
# Returns a Net::ReadAdapter that inflates each read chunk into +dest+.
#