summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAurélien Bompard <aurelien@bompard.org>2012-12-12 14:18:41 +0100
committerAurélien Bompard <aurelien@bompard.org>2012-12-12 14:18:41 +0100
commit65c6b94b26d1688e490384325cd23a30554f5fe1 (patch)
treeb9499dfeb5f677ed85a34bdf6184c32c1bca8860
parent7dfc2ec9317f2c7705ae11ac589226a40812f96f (diff)
downloadkittystore-65c6b94b26d1688e490384325cd23a30554f5fe1.tar.gz
kittystore-65c6b94b26d1688e490384325cd23a30554f5fe1.tar.xz
kittystore-65c6b94b26d1688e490384325cd23a30554f5fe1.zip
Handle empty References tag
-rw-r--r--kittystore/test/test_utils.py35
-rw-r--r--kittystore/utils.py5
2 files changed, 38 insertions, 2 deletions
diff --git a/kittystore/test/test_utils.py b/kittystore/test/test_utils.py
index d097789..7662e81 100644
--- a/kittystore/test/test_utils.py
+++ b/kittystore/test/test_utils.py
@@ -33,6 +33,41 @@ class TestUtils(unittest.TestCase):
msg, "example-list", store)[0]
self.assertEqual(ref_id, None)
+ def test_single_reference(self):
+ msg = Message()
+ msg["From"] = "dummy@example.com"
+ msg["Message-ID"] = "<dummy>"
+ msg["References"] = " <ref-1> "
+ msg.set_payload("Dummy message")
+ store = Mock()
+ ref_id = kittystore.utils.get_ref_and_thread_id(
+ msg, "example-list", store)[0]
+ self.assertEqual(ref_id, "ref-1")
+
+ def test_multiple_reference(self):
+ msg = Message()
+ msg["From"] = "dummy@example.com"
+ msg["Message-ID"] = "<dummy>"
+ msg["References"] = " <ref-1> <ref-2> "
+ msg.set_payload("Dummy message")
+ store = Mock()
+ ref_id = kittystore.utils.get_ref_and_thread_id(
+ msg, "example-list", store)[0]
+ self.assertEqual(ref_id, "ref-1")
+
+ def test_empty_reference(self):
+ msg = Message()
+ msg["From"] = "dummy@example.com"
+ msg["Message-ID"] = "<dummy>"
+ msg["References"] = " "
+ msg.set_payload("Dummy message")
+ store = Mock()
+ try:
+ kittystore.utils.get_ref_and_thread_id(
+ msg, "example-list", store)
+ except IndexError, e:
+ self.fail("Empty 'References' tag should be handled")
+
def test_non_ascii_headers(self):
"""utils.header_to_unicode must handle non-ascii headers"""
testdata = [
diff --git a/kittystore/utils.py b/kittystore/utils.py
index 913b229..badf5af 100644
--- a/kittystore/utils.py
+++ b/kittystore/utils.py
@@ -111,12 +111,13 @@ def get_ref_and_thread_id(message, list_name, store):
return None, None
# It's a reply, use the thread_id from the parent email
ref_id = message.get("References")
- if ref_id is not None:
+ if ref_id is not None and ref_id.strip():
# There can be multiple references, use the first one
ref_id = ref_id.split()[0].strip()
else:
ref_id = message.get("In-Reply-To")
- ref_id = IN_BRACKETS_RE.match(ref_id)
+ if ref_id is not None:
+ ref_id = IN_BRACKETS_RE.match(ref_id)
if ref_id is None:
# Can't parse the reference
return None, None