From d115b3343f15578ed25d420db80822db426ca4da Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Wed, 29 Jun 2016 18:56:52 +0300 Subject: [PATCH] Fix incorrect email validation --- indexer/editable_map_object.cpp | 15 ++++++++++----- .../indexer_tests/editable_map_object_test.cpp | 12 +++++++++++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/indexer/editable_map_object.cpp b/indexer/editable_map_object.cpp index db2c5c760a..14ae7c01c1 100644 --- a/indexer/editable_map_object.cpp +++ b/indexer/editable_map_object.cpp @@ -312,6 +312,15 @@ bool EditableMapObject::ValidateEmail(string const & email) if (email.empty()) return true; + if (strings::IsASCIIString(email)) + return regex_match(email, regex(R"([^@\s]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$)")); + + if ('@' == email.front() || '@' == email.back()) + return false; + + if ('.' == email.back()) + return false; + auto const atPos = find(begin(email), end(email), '@'); if (atPos == end(email)) return false; @@ -320,14 +329,10 @@ bool EditableMapObject::ValidateEmail(string const & email) if (find(next(atPos), end(email), '@') != end(email)) return false; - // There should be at least one '.' sign after '@' ... + // There should be at least one '.' sign after '@' if (find(next(atPos), end(email), '.') == end(email)) return false; - // ... not in the end. - if (email.back() == '.') - return false; - return true; } } // namespace osm diff --git a/indexer/indexer_tests/editable_map_object_test.cpp b/indexer/indexer_tests/editable_map_object_test.cpp index 332c0f2858..496ff0afd2 100644 --- a/indexer/indexer_tests/editable_map_object_test.cpp +++ b/indexer/indexer_tests/editable_map_object_test.cpp @@ -106,10 +106,20 @@ UNIT_TEST(EditableMapObject_ValidateEmail) TEST(EditableMapObject::ValidateEmail(""), ()); TEST(EditableMapObject::ValidateEmail("e@ma.il"), ()); TEST(EditableMapObject::ValidateEmail("e@ma.i.l"), ()); - + TEST(EditableMapObject::ValidateEmail("e-m.ail@dot.com.gov"), ()); + TEST(EditableMapObject::ValidateEmail("#$%&'*+-/=?^`_{}|~.@dot.qw.com.gov"), ()); + TEST(!EditableMapObject::ValidateEmail("e.ma.il"), ()); TEST(!EditableMapObject::ValidateEmail("e@ma@il"), ()); TEST(!EditableMapObject::ValidateEmail("e@ma@i.l"), ()); TEST(!EditableMapObject::ValidateEmail("e@mail"), ()); + TEST(!EditableMapObject::ValidateEmail("@email.a"), ()); + TEST(!EditableMapObject::ValidateEmail("emai.l@"), ()); + TEST(!EditableMapObject::ValidateEmail("emai@l."), ()); + TEST(!EditableMapObject::ValidateEmail("e mai@l.com"), ()); + TEST(!EditableMapObject::ValidateEmail("emai@.l"), ()); + TEST(!EditableMapObject::ValidateEmail("emai@_l.ab"), ()); + TEST(!EditableMapObject::ValidateEmail("emai@l_.ab"), ()); + TEST(!EditableMapObject::ValidateEmail("email@e#$%&'*+-/=?^`_{}|~.com"), ()); } } // namespace