From 7c6e00798eea070acd0e933300af544303f13306 Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Sun, 10 Apr 2016 15:05:44 +0200 Subject: [PATCH] Always imbue C locale when using istringstream. --- src/vmime/misc/importanceHelper.cpp | 2 ++ src/vmime/net/pop3/POP3Connection.cpp | 2 ++ src/vmime/net/pop3/POP3Folder.cpp | 4 ++++ src/vmime/net/smtp/SMTPConnection.cpp | 2 ++ src/vmime/net/smtp/SMTPResponse.cpp | 1 + src/vmime/relay.cpp | 2 ++ src/vmime/utility/url.cpp | 3 ++- 7 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/vmime/misc/importanceHelper.cpp b/src/vmime/misc/importanceHelper.cpp index b13f7466..e1228ee1 100644 --- a/src/vmime/misc/importanceHelper.cpp +++ b/src/vmime/misc/importanceHelper.cpp @@ -67,6 +67,8 @@ importanceHelper::Importance importanceHelper::getImportanceHeader(shared_ptr > n; Importance i = IMPORTANCE_NORMAL; diff --git a/src/vmime/net/pop3/POP3Connection.cpp b/src/vmime/net/pop3/POP3Connection.cpp index 9fa12fa5..27ab7aa2 100644 --- a/src/vmime/net/pop3/POP3Connection.cpp +++ b/src/vmime/net/pop3/POP3Connection.cpp @@ -396,6 +396,8 @@ void POP3Connection::authenticateSASL() const string list(x.begin() + 5, x.end()); std::istringstream iss(list); + iss.imbue(std::locale::classic()); + string mech; while (iss >> mech) diff --git a/src/vmime/net/pop3/POP3Folder.cpp b/src/vmime/net/pop3/POP3Folder.cpp index b3bf88c9..0e232c1a 100644 --- a/src/vmime/net/pop3/POP3Folder.cpp +++ b/src/vmime/net/pop3/POP3Folder.cpp @@ -144,6 +144,7 @@ void POP3Folder::open(const int mode, bool failIfModeIsNotAvailable) throw exceptions::command_error("STAT", response->getFirstLine()); std::istringstream iss(response->getText()); + iss.imbue(std::locale::classic()); iss >> m_messageCount; if (iss.fail()) @@ -372,6 +373,7 @@ void POP3Folder::fetchMessages(std::vector >& msg, const f size_t size = 0; std::istringstream iss((*x).second); + iss.imbue(std::locale::classic()); iss >> size; m->m_size = size; @@ -456,6 +458,7 @@ void POP3Folder::fetchMessage(shared_ptr msg, const fetchAttributes& o size_t size = 0; std::istringstream iss(string(it, responseText.end())); + iss.imbue(std::locale::classic()); iss >> size; dynamicCast (msg)->m_size = size; @@ -677,6 +680,7 @@ shared_ptr POP3Folder::getStatus() size_t count = 0; std::istringstream iss(response->getText()); + iss.imbue(std::locale::classic()); iss >> count; shared_ptr status = make_shared (); diff --git a/src/vmime/net/smtp/SMTPConnection.cpp b/src/vmime/net/smtp/SMTPConnection.cpp index 26f1a4b0..3785126a 100644 --- a/src/vmime/net/smtp/SMTPConnection.cpp +++ b/src/vmime/net/smtp/SMTPConnection.cpp @@ -234,7 +234,9 @@ void SMTPConnection::helo() for (size_t i = 1, n = resp->getLineCount() ; i < n ; ++i) { const string line = resp->getLineAt(i).getText(); + std::istringstream iss(line); + iss.imbue(std::locale::classic()); string ext; iss >> ext; diff --git a/src/vmime/net/smtp/SMTPResponse.cpp b/src/vmime/net/smtp/SMTPResponse.cpp index 75dbbf6b..b4b2c542 100644 --- a/src/vmime/net/smtp/SMTPResponse.cpp +++ b/src/vmime/net/smtp/SMTPResponse.cpp @@ -217,6 +217,7 @@ const SMTPResponse::enhancedStatusCode SMTPResponse::extractEnhancedCode(const s enhancedStatusCode enhCode; std::istringstream iss(responseText); + iss.imbue(std::locale::classic()); if (std::isdigit(iss.peek())) { diff --git a/src/vmime/relay.cpp b/src/vmime/relay.cpp index e5d30c9e..2f4cf350 100644 --- a/src/vmime/relay.cpp +++ b/src/vmime/relay.cpp @@ -79,6 +79,8 @@ void relay::parseImpl std::istringstream iss(string (buffer.begin() + position, buffer.begin() + position + (p - pstart))); + iss.imbue(std::locale::classic()); + string word; std::vector previous; diff --git a/src/vmime/utility/url.cpp b/src/vmime/utility/url.cpp index ce0dc39a..4d7e2920 100644 --- a/src/vmime/utility/url.cpp +++ b/src/vmime/utility/url.cpp @@ -256,8 +256,9 @@ void url::parse(const string& str) throw exceptions::malformed_url("Port can only contain digits"); std::istringstream iss(port); - port_t portNum = 0; + iss.imbue(std::locale::classic()); + port_t portNum = 0; iss >> portNum; if (portNum == 0)