From: "drbrain (Eric Hodel)" Date: 2013-06-12T08:12:54+09:00 Subject: [ruby-core:55447] [ruby-trunk - Bug #8182] XMLRPC request fails with "Wrong size. Was 31564, should be 1501" Issue #8182 has been updated by drbrain (Eric Hodel). =begin 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). An alternate is to only check Content-Length when Content-Encoding is set, but Net::HTTP deletes the Content-Encoding header when it begins to decode the body. (So the user would need to retrieve the Content-Encoding before reading the body). However this is fixed we need to document the recommended way to perform this type of integrity check. =end ---------------------------------------- Bug #8182: XMLRPC request fails with "Wrong size. Was 31564, should be 1501" https://bugs.ruby-lang.org/issues/8182#change-39870 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/