diff --git a/libmproxy/console.py b/libmproxy/console.py index c1e14b332..02f824acf 100644 --- a/libmproxy/console.py +++ b/libmproxy/console.py @@ -306,7 +306,8 @@ class ConnectionView(WWrap): else: e = "identity" return self.master._cached_conn_text( - encoding.decode(e, conn.content), + e, + conn.content, tuple([tuple(i) for i in conn.headers.lst]), viewmode ) @@ -965,7 +966,10 @@ class ConsoleMaster(flow.FlowMaster): return self._view_conn_raw(content, txt) @utils.LRUCache(20) - def _cached_conn_text(self, content, hdrItems, viewmode): + def _cached_conn_text(self, e, rawcontent, hdrItems, viewmode): + content = encoding.decode(e, rawcontent) + if content is None: + content = rawcontent hdr = [] hdr.extend( format_keyvals( diff --git a/libmproxy/encoding.py b/libmproxy/encoding.py index f280ed9fc..b56c03a69 100644 --- a/libmproxy/encoding.py +++ b/libmproxy/encoding.py @@ -14,7 +14,6 @@ def decode(encoding, content): "gzip": decode_gzip, "deflate": decode_deflate, } - return encoding_map.get(encoding, decode_identity)(content) def decode_identity(content): @@ -26,7 +25,10 @@ def decode_identity(content): def decode_gzip(content): gfile = gzip.GzipFile(fileobj=cStringIO.StringIO(content)) - return gfile.read() + try: + return gfile.read() + except IOError: + return None def decode_deflate(content): """ @@ -38,6 +40,9 @@ def decode_deflate(content): http://bugs.python.org/issue5784 """ try: - return zlib.decompress(content) + try: + return zlib.decompress(content) + except zlib.error: + return zlib.decompress(content, -15) except zlib.error: - return zlib.decompress(content, -15) \ No newline at end of file + return None diff --git a/test/test_encoding.py b/test/test_encoding.py index ba0755d66..00632c0e8 100644 --- a/test/test_encoding.py +++ b/test/test_encoding.py @@ -18,11 +18,13 @@ class udecode_gzip(libpry.AutoTree): gf.write('string') gf.close() assert 'string' == encoding.decode('gzip', s.getvalue()) + assert None == encoding.decode("gzip", "bogus") class udecode_deflate(libpry.AutoTree): def test_simple(self): assert 'string' == encoding.decode('deflate', zlib.compress('string')) assert 'string' == encoding.decode('deflate', zlib.compress('string')[2:-4]) + assert None == encoding.decode("deflate", "bogus") tests = [ udecode_identity(),