From f7302f710bd2d7b1cb930e0e68848417a6d3e615 Mon Sep 17 00:00:00 2001 From: Matthew Owen Date: Thu, 5 Dec 2013 09:50:12 -0800 Subject: [PATCH] Reject email addresses where hostname ends with '.' --- mongoengine/fields.py | 2 +- tests/fields/fields.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 0ac6f0e4..82642cda 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -153,7 +153,7 @@ class EmailField(StringField): EMAIL_REGEX = re.compile( r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string - r')@(?:[A-Z0-9](?:[A-Z0-9-]{0,253}[A-Z0-9])?\.)+[A-Z]{2,6}\.?$', re.IGNORECASE # domain + r')@(?:[A-Z0-9](?:[A-Z0-9-]{0,253}[A-Z0-9])?\.)+[A-Z]{2,6}$', re.IGNORECASE # domain ) def validate(self, value): diff --git a/tests/fields/fields.py b/tests/fields/fields.py index 9ce6ae87..c108f37e 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -2499,6 +2499,9 @@ class FieldTest(unittest.TestCase): user = User(email="ross@example.com") self.assertTrue(user.validate() is None) + user = User(email="ross@example.co.uk") + self.assertTrue(user.validate() is None) + user = User(email=("Kofq@rhom0e4klgauOhpbpNdogawnyIKvQS0wk2mjqrgGQ5S" "ucictfqpdkK9iS1zeFw8sg7s7cwAF7suIfUfeyueLpfosjn3" "aJIazqqWkm7.net")) @@ -2507,6 +2510,9 @@ class FieldTest(unittest.TestCase): user = User(email='me@localhost') self.assertRaises(ValidationError, user.validate) + user = User(email="ross@example.com.") + self.assertRaises(ValidationError, user.validate) + def test_email_field_honors_regex(self): class User(Document): email = EmailField(regex=r'\w+@example.com') @@ -2594,13 +2600,13 @@ class FieldTest(unittest.TestCase): def test_invalid_dict_value(self): class DictFieldTest(Document): dictionary = DictField(required=True) - + DictFieldTest.drop_collection() test = DictFieldTest(dictionary=None) test.dictionary # Just access to test getter self.assertRaises(ValidationError, test.validate) - + test = DictFieldTest(dictionary=False) test.dictionary # Just access to test getter self.assertRaises(ValidationError, test.validate)