From: "naruse (Yui NARUSE)" Date: 2012-05-25T10:25:55+09:00 Subject: [ruby-core:45229] [ruby-trunk - Feature #6492] Inflate all HTTP Content-Encoding: deflate, gzip, x-gzip responses by default Issue #6492 has been updated by naruse (Yui NARUSE). I agree with the concept of the patch, but > + ensure > + @socket.finish if Inflater === @socket When @socket is Socket-like object, the object should behave like a socket. Inflater#finish should be Inflater#shutdown or Inflater#close and this if-clause is not needed. > - def read_chunked(dest) > + def read_chunked(dest, inflater) > len = nil > total = 0 > while true > @@ -303,7 +331,7 @@ class Net::HTTPResponse > len = hexlen.hex > break if len == 0 > begin > - @socket.read len, dest > + inflater.read len, dest > ensure > total += len > @socket.read 2 # \r\n def this variable inflater is confusing with the inflater method. >+ def read clen, dest, ignore_eof = false > + temp_dest = '' > + > + @socket.read clen, temp_dest, ignore_eof > + > + dest << @inflate.inflate(temp_dest) > + end This read method return a string whose length is not clen, this is wrong. Other IO-like object for example Zlib::GzipReader returns a string whose length is clen. So Inflater should have a internal buffer and return the string whose length is just clen. ---------------------------------------- Feature #6492: Inflate all HTTP Content-Encoding: deflate, gzip, x-gzip responses by default https://bugs.ruby-lang.org/issues/6492#change-26812 Author: drbrain (Eric Hodel) Status: Open Priority: Normal Assignee: Category: lib Target version: 2.0.0 =begin This patch moves the compression-handling code from Net::HTTP#get to Net::HTTPResponse to allow decompression to occur by default on any response body. (A future patch will set the Accept-Encoding on all requests that allow response bodies by default.) Instead of having separate decompression code for deflate and gzip-encoded responses, (({Zlib::Inflate.new(32 + Zlib::MAX_WBITS)})) is used which automatically detects and inflated gzip-wrapped streams which allows for simpler processing of gzip bodies (no need to create a StringIO). =end -- http://bugs.ruby-lang.org/