Actions
Bug #11058
closed[PATCH] Net::HTTPResponse#read_body raises TypeError when receiving empty gzipped response body
ruby -v:
ruby 2.3.0dev (2015-04-11 master 50228) [x86_64-linux]
Description
Following code raises TypeError.
require 'net/http'
def dummy_io(str)
str = str.gsub(/\n/, "\r\n")
Net::BufferedIO.new(StringIO.new(str))
end
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
res.reading_body io, true do
res.read_body
end
There are two problems.
(1) In Net::HTTPResponse#inflater, e
may be nil and causes TypeError if inflate_body_io.finish
failed.
begin
yield inflate_body_io
ensure
e = $!
begin
inflate_body_io.finish
rescue
raise e
end
end
(2) Zlib::ZStream#finish raises Zlib::BufError when inflating an empty string, so we should avoid calling #finish in such case.
require 'zlib'
inflate = Zlib::Inflate.new
inflate.inflate('')
inflate.finish #=> Zlib::BufError: buffer error
Files
Actions
Like0
Like0Like0Like0Like0Like0