aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/flow.py1
-rw-r--r--mitmproxy/http.py1
-rw-r--r--test/mitmproxy/test_flow.py11
3 files changed, 13 insertions, 0 deletions
diff --git a/mitmproxy/flow.py b/mitmproxy/flow.py
index 294aba26..dc778404 100644
--- a/mitmproxy/flow.py
+++ b/mitmproxy/flow.py
@@ -99,6 +99,7 @@ class Flow(stateobject.StateObject):
return d
def set_state(self, state):
+ state = state.copy()
state.pop("version")
if "backup" in state:
self._backup = state.pop("backup")
diff --git a/mitmproxy/http.py b/mitmproxy/http.py
index c09778fe..7762647b 100644
--- a/mitmproxy/http.py
+++ b/mitmproxy/http.py
@@ -56,6 +56,7 @@ class HTTPRequest(http.Request):
return state
def set_state(self, state):
+ state = state.copy()
self.is_replay = state.pop("is_replay")
super().set_state(state)
diff --git a/test/mitmproxy/test_flow.py b/test/mitmproxy/test_flow.py
index 7f9d577b..fcc766b5 100644
--- a/test/mitmproxy/test_flow.py
+++ b/test/mitmproxy/test_flow.py
@@ -84,6 +84,17 @@ class TestSerialize:
with pytest.raises(Exception, match="version"):
list(r.stream())
+ def test_copy(self):
+ """
+ _backup may be shared across instances. That should not raise errors.
+ """
+ f = tflow.tflow()
+ f.backup()
+ f.request.path = "/foo"
+ f2 = f.copy()
+ f2.revert()
+ f.revert()
+
class TestFlowMaster:
def test_load_flow_reverse(self):