From 8c962643049b37e755b175b4cbc77a4e12a03944 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Wed, 11 Apr 2012 10:10:53 +1200 Subject: [PATCH] Serialized data version check. --- libmproxy/flow.py | 3 +++ test/test_flow.py | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 571da8363..4942d263f 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -1575,6 +1575,9 @@ class FlowReader: try: while 1: data = tnetstring.load(self.fo) + if tuple(data["version"]) != version.IVERSION: + v = ".".join(str(i) for i in data["version"]) + raise FlowReadError("Incompatible serialized data version: %s"%v) off = self.fo.tell() yield Flow._from_state(data) except ValueError: diff --git a/test/test_flow.py b/test/test_flow.py index a7ab7cc2c..74cf79f89 100644 --- a/test/test_flow.py +++ b/test/test_flow.py @@ -1,7 +1,7 @@ import Queue, time from cStringIO import StringIO import email.utils -from libmproxy import filt, flow, controller, utils +from libmproxy import filt, flow, controller, utils, tnetstring import tutils import libpry @@ -494,6 +494,17 @@ class uSerialize(libpry.AutoTree): f = flow.FlowReadError("foo") assert f.strerror == "foo" + def test_versioncheck(self): + f = tutils.tflow() + d = f._get_state() + d["version"] = (0, 0) + sio = StringIO() + tnetstring.dump(d, sio) + sio.seek(0) + + r = flow.FlowReader(sio) + libpry.raises("version", list, r.stream()) + class uFlowMaster(libpry.AutoTree): def test_load_script(self):