From c7952371b718b6eb8d14e8fb8acddcdcbd8def5e Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Fri, 15 Jun 2012 17:40:08 +1200 Subject: [PATCH] Fix a problem in ODictCaseless that could cause duplicate headers. --- libmproxy/flow.py | 5 ++++- test/test_flow.py | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libmproxy/flow.py b/libmproxy/flow.py index e25460b54..21a8f3a2f 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -142,6 +142,7 @@ class ODict: return ret def _filter_lst(self, k, lst): + k = self._kconv(k) new = [] for i in lst: if self._kconv(i[0]) != k: @@ -163,7 +164,7 @@ class ODict: raise ValueError("ODict valuelist should be lists.") new = self._filter_lst(k, self.lst) for i in valuelist: - new.append((k, i)) + new.append([k, i]) self.lst = new def __delitem__(self, k): @@ -478,6 +479,8 @@ class Request(HTTPMsg): appropriate content-type header. Note that this will destory the existing body if there is one. """ + # FIXME: If there's an existing content-type header indicating a + # url-encoded form, leave it alone. self.headers["Content-Type"] = [HDR_FORM_URLENCODED] self.content = utils.urlencode(odict.lst) diff --git a/test/test_flow.py b/test/test_flow.py index 59d130f75..89577ddbc 100644 --- a/test/test_flow.py +++ b/test/test_flow.py @@ -1052,6 +1052,12 @@ class TestODictCaseless: def setUp(self): self.od = flow.ODictCaseless() + def test_override(self): + o = flow.ODictCaseless() + o.add('T', 'application/x-www-form-urlencoded; charset=UTF-8') + o["T"] = ["foo"] + assert o["T"] == ["foo"] + def test_case_preservation(self): self.od["Foo"] = ["1"] assert "foo" in self.od