diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2011-07-01 13:07:09 +1200 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2011-07-01 14:20:42 +1200 |
commit | 8e176c2086bee1c83165b1000dd980fa62e3b51e (patch) | |
tree | 56dbb8b4234fe550ea2b2545ba3108ad4d8bbb6a | |
parent | 2a90ea69fd9d4d2427a13d3d1cd21ec1b6dc628f (diff) | |
download | mitmproxy-8e176c2086bee1c83165b1000dd980fa62e3b51e.tar.gz mitmproxy-8e176c2086bee1c83165b1000dd980fa62e3b51e.tar.bz2 mitmproxy-8e176c2086bee1c83165b1000dd980fa62e3b51e.zip |
Cast some data read from dump files to str, to prevent unicode promotion.
This fixes a bug that caused a traceback when de-serialized requests were
replayed. Also adds unit tests for the problem.
-rw-r--r-- | libmproxy/proxy.py | 10 | ||||
-rw-r--r-- | test/test_flow.py | 6 |
2 files changed, 10 insertions, 6 deletions
diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py index 916d18eb..362d622d 100644 --- a/libmproxy/proxy.py +++ b/libmproxy/proxy.py @@ -198,11 +198,11 @@ class Request(controller.Msg): def from_state(klass, state): return klass( ClientConnect.from_state(state["client_conn"]), - state["host"], + str(state["host"]), state["port"], - state["scheme"], - state["method"], - state["path"], + str(state["scheme"]), + str(state["method"]), + str(state["path"]), utils.Headers.from_state(state["headers"]), base64.decodestring(state["content"]), state["timestamp"] @@ -353,7 +353,7 @@ class Response(controller.Msg): return klass( request, state["code"], - state["msg"], + str(state["msg"]), utils.Headers.from_state(state["headers"]), base64.decodestring(state["content"]), state["timestamp"], diff --git a/test/test_flow.py b/test/test_flow.py index b7a368d2..6ee4235e 100644 --- a/test/test_flow.py +++ b/test/test_flow.py @@ -385,6 +385,7 @@ class uSerialize(libpry.AutoTree): def test_roundtrip(self): sio = StringIO() f = tutils.tflow() + f.request.content = "".join(chr(i) for i in range(255)) w = flow.FlowWriter(sio) w.add(f) @@ -392,7 +393,10 @@ class uSerialize(libpry.AutoTree): r = flow.FlowReader(sio) l = list(r.stream()) assert len(l) == 1 - assert l[0] == f + + f2 = l[0] + assert f2 == f + assert f2.request.assemble() == f.request.assemble() def test_load_flows(self): r = self._treader() |