aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2011-07-01 13:07:09 +1200
committerAldo Cortesi <aldo@nullcube.com>2011-07-01 14:20:42 +1200
commit8e176c2086bee1c83165b1000dd980fa62e3b51e (patch)
tree56dbb8b4234fe550ea2b2545ba3108ad4d8bbb6a
parent2a90ea69fd9d4d2427a13d3d1cd21ec1b6dc628f (diff)
downloadmitmproxy-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.py10
-rw-r--r--test/test_flow.py6
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()