* lib/net/http/response.rb (Net::HTTPResponse::Inflater#finish):

fix a bug that empty gzipped response body causes Zlib::BufError.
  [ruby-core:68846] [Bug #11058]

* test/net/http/test_httpresponse.rb: tests for the above.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51465 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ktsj 2015-08-01 08:23:32 +00:00
Родитель d7bb66df26
Коммит 9cf11b70ca
3 изменённых файлов: 62 добавлений и 0 удалений

Просмотреть файл

@ -1,3 +1,11 @@
Sat Aug 1 17:13:15 2015 Kazuki Tsujimoto <kazuki@callcc.net>
* lib/net/http/response.rb (Net::HTTPResponse::Inflater#finish):
fix a bug that empty gzipped response body causes Zlib::BufError.
[ruby-core:68846] [Bug #11058]
* test/net/http/test_httpresponse.rb: tests for the above.
Sat Aug 1 17:05:18 2015 Kazuki Tsujimoto <kazuki@callcc.net>
* lib/net/http/response.rb (Net::HTTPResponse#inflater):

Просмотреть файл

@ -359,6 +359,7 @@ class Net::HTTPResponse
# Finishes the inflate stream.
def finish
return if @inflate.total_in == 0
@inflate.finish
end

Просмотреть файл

@ -237,6 +237,59 @@ EOS
assert_equal "\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x03", body
end
def test_read_body_content_encoding_deflate_empty_body
io = dummy_io(<<EOS)
HTTP/1.1 200 OK
Connection: close
Content-Encoding: deflate
Content-Length: 0
EOS
res = Net::HTTPResponse.read_new(io)
res.decode_content = true
body = nil
res.reading_body io, true do
body = res.read_body
end
if Net::HTTP::HAVE_ZLIB
assert_equal nil, res['content-encoding']
assert_equal '', body
else
assert_equal 'deflate', res['content-encoding']
assert_equal '', body
end
end
def test_read_body_content_encoding_deflate_empty_body_no_length
io = dummy_io(<<EOS)
HTTP/1.1 200 OK
Connection: close
Content-Encoding: deflate
EOS
res = Net::HTTPResponse.read_new(io)
res.decode_content = true
body = nil
res.reading_body io, true do
body = res.read_body
end
if Net::HTTP::HAVE_ZLIB
assert_equal nil, res['content-encoding']
assert_equal '', body
else
assert_equal 'deflate', res['content-encoding']
assert_equal '', body
end
end
def test_read_body_string
io = dummy_io(<<EOS)
HTTP/1.1 200 OK