Bug #8182 » 308.patch
ChangeLog | ||
---|---|---|
Thu May 16 18:09:03 2013 Duncan Mac-Vicar P. <dmacvicar@suse.de>
|
||
* lib/net/http/response.rb: transparently deflates the response body,
|
||
removes the "content-encoding" response header, but does not adjust
|
||
the "content-length" header accordingly.
|
||
So, pass the context to the Inflater so that we count the
|
||
uncompressed data for every chunk inflated, and then on finish we
|
||
set the right Content-Length.
|
||
[Bug #8182]
|
||
* test/net/http/test_httpresponse.rb: enhance testcase to check
|
||
the right Content-Length
|
||
Wed May 15 17:55:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||
* configure.in (RUBY_PLATFORM): move to config.h as needed by
|
lib/net/http/response.rb | ||
---|---|---|
when 'deflate', 'gzip', 'x-gzip' then
|
||
self.delete 'content-encoding'
|
||
inflate_body_io = Inflater.new(@socket)
|
||
inflate_body_io = Inflater.new(@socket, self)
|
||
begin
|
||
yield inflate_body_io
|
||
... | ... | |
##
|
||
# Creates a new Inflater wrapping +socket+
|
||
def initialize socket
|
||
def initialize(socket, response)
|
||
@socket = socket
|
||
@response = response
|
||
@deflated_len = 0
|
||
# zlib with automatic gzip detection
|
||
@inflate = Zlib::Inflate.new(32 + Zlib::MAX_WBITS)
|
||
end
|
||
... | ... | |
def finish
|
||
@inflate.finish
|
||
@response['content-length'] = @deflated_len
|
||
end
|
||
##
|
||
... | ... | |
block = proc do |compressed_chunk|
|
||
@inflate.inflate(compressed_chunk) do |chunk|
|
||
dest << chunk
|
||
@deflated_len += chunk.bytesize
|
||
end
|
||
end
|
||
test/net/http/test_httpresponse.rb | ||
---|---|---|
if Net::HTTP::HAVE_ZLIB
|
||
assert_equal nil, res['content-encoding']
|
||
assert_equal '5', res['content-length'], "Bug #8182"
|
||
assert_equal 'hello', body
|
||
else
|
||
assert_equal 'deflate', res['content-encoding']
|
||
assert_equal '13', res['content-length'], "Bug #8182"
|
||
assert_equal "x\x9C\xCBH\xCD\xC9\xC9\a\x00\x06,\x02\x15", body
|
||
end
|
||
end
|