Fix of email validation 57/140957/3 submit/tizen/20170728.083506 submit/tizen_4.0/20170811.094300
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Thu, 27 Jul 2017 08:31:22 +0000 (11:31 +0300)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Thu, 27 Jul 2017 11:05:46 +0000 (11:05 +0000)
Change-Id: I96f423fec9ec6292147b92f1cd5d3e0504aff75f
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
src/Common/MsgEngine/src/MsgUtils.cpp

index 72224d0..4ebd43d 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "MsgUtils.h"
 #include "LangUtils.h"
+#include "Logger.h"
 
 #include <string.h>
 #include <ctype.h>
@@ -28,7 +29,7 @@ namespace {
     unsigned emailAddrLenMax = 256;
     const char *delimiters = ",;";
     const char *numberRegex = "\\+?([[:digit:]][ *\\(\\)-]*){2,14}[[:digit:]]$";
-    const char *emailRegex = "(([[:alnum:]_!#$%&'*+/=?`{|}~^-]+)|(^\"([[:alnum:]_!#$%&'*+/=?`{|}~^-\\(\\)<>\\[\\]:;@,. (\\\\)(\\\")])+\"))+(?:\\.(([[:alnum:]_!#$%&'*+/=?`{|}~^-]+)|(\"([[:alnum:]_!#$%&'*+/=?`{|}~^-\\(\\)<>\\[\\]:;@,. (\\\\)(\\\")])+\")))*@[[:alnum:]-]+(?:\\.[[:alnum:]-]+)*";
+    const char *emailRegex = "(?:(?:[^<>()\\[\\].,;:\\s@\"]+(?:\\.[^<>()\\[\\].,;:\\s@\"]+)*)|\".+\")@(?:(?:[^<>()‌​\\[\\].,;:\\s@\"]+\\.)+[^<>()\\[\\].,;:\\s@\"]{2,})";
 }
 
 TokenizedRecipients MsgUtils::tokenizeRecipients(const std::string &inputText)
@@ -62,9 +63,13 @@ bool MsgUtils::isValidNumber(const std::string &address)
 {
     if (address.empty())
         return false;
-
-    std::regex numTemplate(numberRegex);
-    return std::regex_match(address, numTemplate);
+    try {
+        std::regex numTemplate(numberRegex);
+        return std::regex_match(address, numTemplate);
+    }  catch (const std::regex_error& e) {
+        MSG_LOG_ERROR("std::regex_error");
+        return false;
+    }
 }
 
 bool MsgUtils::isValidEmail(const std::string &address)
@@ -72,8 +77,13 @@ bool MsgUtils::isValidEmail(const std::string &address)
     if (address.empty() || address.length() > emailAddrLenMax)
         return false;
 
-    std::regex emailTemplate(emailRegex);
-    return std::regex_match(address, emailTemplate);
+    try {
+        std::regex emailTemplate(emailRegex);
+        return std::regex_match(address, emailTemplate);
+    }  catch (const std::regex_error& e) {
+        MSG_LOG_ERROR("std::regex_error");
+        return false;
+    }
 }
 
 bool MsgUtils::isValidAddress(const std::string &address)