зеркало из https://github.com/github/ruby.git
[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. Don't delete content-length before yielding inflate body, as that causes a switch to read the entire body instead of reading in chunks. Fixes [Bug #16672] https://github.com/ruby/net-http/commit/58284e9710 Co-authored-by: st0012 <stan001212@gmail.com>
This commit is contained in:
Родитель
54b53e2c8f
Коммит
0579486f15
|
@ -431,6 +431,9 @@ class Net::HTTPResponse
|
|||
ensure
|
||||
begin
|
||||
inflate_body_io.finish
|
||||
if self['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
|
||||
|
@ -532,6 +535,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+.
|
||||
#
|
||||
|
|
|
@ -362,9 +362,11 @@ EOS
|
|||
|
||||
if Net::HTTP::HAVE_ZLIB
|
||||
assert_equal nil, res['content-encoding']
|
||||
assert_equal '5', res['content-length']
|
||||
assert_equal 'hello', body
|
||||
else
|
||||
assert_equal 'deflate', res['content-encoding']
|
||||
assert_equal '13', res['content-length']
|
||||
assert_equal "x\x9C\xCBH\xCD\xC9\xC9\a\x00\x06,\x02\x15", body
|
||||
end
|
||||
end
|
||||
|
@ -390,9 +392,11 @@ EOS
|
|||
|
||||
if Net::HTTP::HAVE_ZLIB
|
||||
assert_equal nil, res['content-encoding']
|
||||
assert_equal '5', res['content-length']
|
||||
assert_equal 'hello', body
|
||||
else
|
||||
assert_equal 'DEFLATE', res['content-encoding']
|
||||
assert_equal '13', res['content-length']
|
||||
assert_equal "x\x9C\xCBH\xCD\xC9\xC9\a\x00\x06,\x02\x15", body
|
||||
end
|
||||
end
|
||||
|
@ -423,9 +427,11 @@ EOS
|
|||
|
||||
if Net::HTTP::HAVE_ZLIB
|
||||
assert_equal nil, res['content-encoding']
|
||||
assert_equal nil, res['content-length']
|
||||
assert_equal 'hello', body
|
||||
else
|
||||
assert_equal 'deflate', res['content-encoding']
|
||||
assert_equal nil, res['content-length']
|
||||
assert_equal "x\x9C\xCBH\xCD\xC9\xC9\a\x00\x06,\x02\x15", body
|
||||
end
|
||||
end
|
||||
|
@ -450,6 +456,7 @@ EOS
|
|||
end
|
||||
|
||||
assert_equal 'deflate', res['content-encoding'], 'Bug #7831'
|
||||
assert_equal '13', res['content-length']
|
||||
assert_equal "x\x9C\xCBH\xCD\xC9\xC9\a\x00\x06,\x02\x15", body, 'Bug #7381'
|
||||
end
|
||||
|
||||
|
@ -473,9 +480,11 @@ EOS
|
|||
|
||||
if Net::HTTP::HAVE_ZLIB
|
||||
assert_equal nil, res['content-encoding']
|
||||
assert_equal nil, res['content-length']
|
||||
assert_equal 'hello', body
|
||||
else
|
||||
assert_equal 'deflate', res['content-encoding']
|
||||
assert_equal nil, res['content-length']
|
||||
assert_equal "x\x9C\xCBH\xCD\xC9\xC9\a\x00\x06,\x02\x15\r\n", body
|
||||
end
|
||||
end
|
||||
|
@ -523,9 +532,11 @@ EOS
|
|||
|
||||
if Net::HTTP::HAVE_ZLIB
|
||||
assert_equal nil, res['content-encoding']
|
||||
assert_equal '0', res['content-length']
|
||||
assert_equal '', body
|
||||
else
|
||||
assert_equal 'deflate', res['content-encoding']
|
||||
assert_equal '0', res['content-length']
|
||||
assert_equal '', body
|
||||
end
|
||||
end
|
||||
|
@ -549,9 +560,11 @@ EOS
|
|||
|
||||
if Net::HTTP::HAVE_ZLIB
|
||||
assert_equal nil, res['content-encoding']
|
||||
assert_equal nil, res['content-length']
|
||||
assert_equal '', body
|
||||
else
|
||||
assert_equal 'deflate', res['content-encoding']
|
||||
assert_equal nil, res['content-length']
|
||||
assert_equal '', body
|
||||
end
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче