Skip to content

Commit 8f437fe

Browse files
authored
Merge pull request #2 from ericksc/feature/hu02-email
HU-02: Reject ASCII control characters in quoted email local parts
2 parents 851d6f9 + f0eb665 commit 8f437fe

2 files changed

Lines changed: 11 additions & 9 deletions

File tree

‎src/validators/email.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ def email(
9393
+ r"(\.[\u0100-\u017F\u0180-\u024F\u00A0-\u00FF0-9a-z!#$%&'*+/=?^_`{}|~\-]+)*$"
9494
# quoted-string
9595
+ r'|^"('
96-
+ r"[\u0100-\u017F\u0180-\u024F\u00A0-\u00FF\001-\010\013\014\016-\037"
97-
+ r"!#-\[\]-\177]|\\[\011.]"
96+
+ r"[\u0100-\u017F\u0180-\u024F\u00A0-\u00FF"
97+
+ r"!#-\[\]-~]|\\[\011.]"
9898
+ r')*")$',
9999
username_part,
100100
re.IGNORECASE,
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""HU-02: reject SOH in an address intended for SMTP (RFC 5321)."""
1+
"""HU-02: reject ASCII control characters in quoted SMTP local parts."""
22

33
# external
44
import pytest
@@ -7,12 +7,14 @@
77

88

99
@pytest.mark.parametrize(
10-
("email",),
11-
[
12-
('"user\x01name"@example.com', ),
13-
],
10+
"control_code",
11+
[1, 2, 7, 11, 12, 14, 27, 31, 127],
1412
)
15-
def test_email_rejects_soh_control_character(email: str):
16-
"""The Python escape introduces the actual ASCII SOH character."""
13+
14+
def test_email_rejects_control_characters(control_code: int):
15+
"""Reject selected ASCII control characters in quoted local parts."""
16+
email = f'"user{chr(control_code)}name"@example.com'
17+
1718
result = validators.email(email)
19+
1820
assert isinstance(result, validators.ValidationError), repr(result)

0 commit comments

Comments
 (0)