diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2007-04-15 01:44:40 +0000 |
---|---|---|
committer | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2007-04-15 01:44:40 +0000 |
commit | 5a1e2b5d174ba11073ff122530b29488185366c0 (patch) | |
tree | 2ca5fb4a6e7ddbf782366bc8361da8da273ef6ef /lib/rbot | |
parent | 52f4457cf8aad0de59b7bd83e86b6cab228a45d6 (diff) |
HttpUtil: fix gunzipping with partial content; and debug response in url plugin earlier
Diffstat (limited to 'lib/rbot')
-rw-r--r-- | lib/rbot/core/utils/httputil.rb | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/rbot/core/utils/httputil.rb b/lib/rbot/core/utils/httputil.rb index b4219f66..3c949686 100644 --- a/lib/rbot/core/utils/httputil.rb +++ b/lib/rbot/core/utils/httputil.rb @@ -78,7 +78,21 @@ module ::Net return str when 'gzip', 'x-gzip' debug "gunzipping body" - return Zlib::GzipReader.new(StringIO.new(str)).read + begin + return Zlib::GzipReader.new(StringIO.new(str)).read + rescue Zlib::Error => e + # If we can't unpack the whole stream (e.g. because we're doing a + # partial read + debug "full gunzipping failed (#{e}), trying to recover as much as possible" + ret = "" + begin + Zlib::GzipReader.new(StringIO.new(str)).each_byte { |byte| + ret << byte + } + rescue + end + return ret + end else raise "Unhandled content encoding #{method}" end |