From: "kou (Kouhei Sutou)" Date: 2013-06-13T00:15:44+09:00 Subject: [ruby-core:55461] [ruby-trunk - Bug #8182] XMLRPC request fails with "Wrong size. Was 31564, should be 1501" Issue #8182 has been updated by kou (Kouhei Sutou). drbrain (Eric Hodel) wrote: > Consider this example: > > http.request req do |res| > expected = res['Content-Length'] # size of encoded content > actual = 0 > > res.read_body { |chunk| actual += chunk.bytesize } > > raise 'too short' unless expected == actual > end > > Here the user stores the Content-Length before Net::HTTP can reads the decoded body, so altering the Content-Length may not help fix this class of bug generally (but will for XMLRPC). I think that we don't care about the case. In the case, the user must handle Content-Encoding by himself. The user should disable auto-decode feature. I think that we care about the following case (this is XMLRPC::Client case): http.request req do |res| actual = 0 res.read_body { |chunk| actual += chunk.bytesize } expected = res['Content-Length'] # size of encoded content raise 'too short' unless expected == actual end In this case, we already deleted Content-Encoding when the user retrieves Content-Length. So the user should be able to handle the body as decoded content. In this point of view, Content-Length should be the length of decoded content. duncan's patch is this point of view. I like duncan's approach but don't like the details as I mentioned... ---------------------------------------- Bug #8182: XMLRPC request fails with "Wrong size. Was 31564, should be 1501" https://bugs.ruby-lang.org/issues/8182#change-39891 Author: tsagadar (Marcel Mueller) Status: Assigned Priority: High Assignee: kou (Kouhei Sutou) Category: core Target version: current: 2.1.0 ruby -v: ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.1] Backport: Since upgrading to Ruby 2.0.0p0 we can no longer use MailChimp through the Hominid gem. Hominid relies on the Ruby XMLRPC client to access MailChimp. Debugging the issues revealed the following problem: net/http/response.rb transparently deflates the response body, removes the "content-encoding" response header (response.rb:255), but does not adjust the "content-length" header accordingly. This makes xmlrpc/client.rb:506 raise the error, that the response body and the declared length in "content-length" does not match. I propose a high priority for this issue for two reason: - The problem should occur whenever Ruby XMLRPC is used to access a service that supports content encoding with "deflate", "gzip", or "x-gzip" - I don't see a workaround to this problem that could be used -- http://bugs.ruby-lang.org/