From 46b0e25b33541f854cd4fee3673845aa8e0b8913 Mon Sep 17 00:00:00 2001 From: Denis Dolzhenko Date: Thu, 27 Jul 2017 11:31:22 +0300 Subject: [PATCH] Fix of email validation Change-Id: I96f423fec9ec6292147b92f1cd5d3e0504aff75f Signed-off-by: Denis Dolzhenko --- src/Common/MsgEngine/src/MsgUtils.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Common/MsgEngine/src/MsgUtils.cpp b/src/Common/MsgEngine/src/MsgUtils.cpp index 72224d02..4ebd43df 100644 --- a/src/Common/MsgEngine/src/MsgUtils.cpp +++ b/src/Common/MsgEngine/src/MsgUtils.cpp @@ -16,6 +16,7 @@ #include "MsgUtils.h" #include "LangUtils.h" +#include "Logger.h" #include #include @@ -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) -- 2.34.1