Bläddra i källkod

Fix add_or_replace_header: make sure to delete all header occurrences before

Son NK 5 år sedan
förälder
incheckning
dec36ceeec
2 ändrade filer med 16 tillägg och 5 borttagningar
  1. 5 5
      app/email_utils.py
  2. 11 0
      tests/test_email_utils.py

+ 5 - 5
app/email_utils.py

@@ -290,11 +290,11 @@ def add_dkim_signature(msg: Message, email_domain: str):
 
 
 
 
 def add_or_replace_header(msg: Message, header: str, value: str):
 def add_or_replace_header(msg: Message, header: str, value: str):
-    try:
-        msg.add_header(header, value)
-    except ValueError:
-        # the header exists already
-        msg.replace_header(header, value)
+    """
+    Remove all occurrences of `header` and add `header` with `value`.
+    """
+    delete_header(msg, header)
+    msg[header] = value
 
 
 
 
 def delete_header(msg: Message, header: str):
 def delete_header(msg: Message, header: str):

+ 11 - 0
tests/test_email_utils.py

@@ -8,6 +8,7 @@ from app.email_utils import (
     email_belongs_to_alias_domains,
     email_belongs_to_alias_domains,
     can_be_used_as_personal_email,
     can_be_used_as_personal_email,
     delete_header,
     delete_header,
+    add_or_replace_header,
 )
 )
 from app.extensions import db
 from app.extensions import db
 from app.models import User, CustomDomain
 from app.models import User, CustomDomain
@@ -71,3 +72,13 @@ def test_delete_header():
 
 
     delete_header(msg, "H")
     delete_header(msg, "H")
     assert msg._headers == []
     assert msg._headers == []
+
+
+def test_add_or_replace_header():
+    msg = EmailMessage()
+    msg["H"] = "abcd"
+    msg["H"] = "xyzt"
+    assert msg._headers == [("H", "abcd"), ("H", "xyzt")]
+
+    add_or_replace_header(msg, "H", "new")
+    assert msg._headers == [("H", "new")]