diff options
Diffstat (limited to 'Swiften/Parser')
3 files changed, 16 insertions, 12 deletions
diff --git a/Swiften/Parser/PayloadParsers/BytestreamsParser.cpp b/Swiften/Parser/PayloadParsers/BytestreamsParser.cpp index 405c593..71bce54 100644 --- a/Swiften/Parser/PayloadParsers/BytestreamsParser.cpp +++ b/Swiften/Parser/PayloadParsers/BytestreamsParser.cpp | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2010-2016 Isode Limited. | 2 | * Copyright (c) 2010-2018 Isode Limited. |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * See the COPYING file for more information. | 4 | * See the COPYING file for more information. |
| 5 | */ | 5 | */ |
| @@ -7,6 +7,7 @@ | |||
| 7 | #include <Swiften/Parser/PayloadParsers/BytestreamsParser.h> | 7 | #include <Swiften/Parser/PayloadParsers/BytestreamsParser.h> |
| 8 | 8 | ||
| 9 | #include <boost/lexical_cast.hpp> | 9 | #include <boost/lexical_cast.hpp> |
| 10 | #include <boost/numeric/conversion/cast.hpp> | ||
| 10 | 11 | ||
| 11 | namespace Swift { | 12 | namespace Swift { |
| 12 | 13 | ||
| @@ -23,7 +24,9 @@ void BytestreamsParser::handleStartElement(const std::string& element, const std | |||
| 23 | else if (level == PayloadLevel) { | 24 | else if (level == PayloadLevel) { |
| 24 | if (element == "streamhost") { | 25 | if (element == "streamhost") { |
| 25 | try { | 26 | try { |
| 26 | getPayloadInternal()->addStreamHost(Bytestreams::StreamHost(attributes.getAttribute("host"), JID(attributes.getAttribute("jid")), boost::lexical_cast<int>(attributes.getAttribute("port")))); | 27 | getPayloadInternal()->addStreamHost(Bytestreams::StreamHost(attributes.getAttribute("host"), JID(attributes.getAttribute("jid")), boost::numeric_cast<unsigned short>(boost::lexical_cast<int>(attributes.getAttribute("port"))))); |
| 28 | } | ||
| 29 | catch (boost::numeric::bad_numeric_cast&) { | ||
| 27 | } | 30 | } |
| 28 | catch (boost::bad_lexical_cast&) { | 31 | catch (boost::bad_lexical_cast&) { |
| 29 | } | 32 | } |
diff --git a/Swiften/Parser/PayloadParsers/JingleS5BTransportMethodPayloadParser.cpp b/Swiften/Parser/PayloadParsers/JingleS5BTransportMethodPayloadParser.cpp index e639e20..a405e0e 100644 --- a/Swiften/Parser/PayloadParsers/JingleS5BTransportMethodPayloadParser.cpp +++ b/Swiften/Parser/PayloadParsers/JingleS5BTransportMethodPayloadParser.cpp | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | */ | 5 | */ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (c) 2014-2016 Isode Limited. | 8 | * Copyright (c) 2014-2018 Isode Limited. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * See the COPYING file for more information. | 10 | * See the COPYING file for more information. |
| 11 | */ | 11 | */ |
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <Swiften/Parser/PayloadParsers/JingleS5BTransportMethodPayloadParser.h> | 13 | #include <Swiften/Parser/PayloadParsers/JingleS5BTransportMethodPayloadParser.h> |
| 14 | 14 | ||
| 15 | #include <boost/lexical_cast.hpp> | 15 | #include <boost/lexical_cast.hpp> |
| 16 | #include <boost/numeric/conversion/cast.hpp> | ||
| 16 | #include <boost/optional.hpp> | 17 | #include <boost/optional.hpp> |
| 17 | 18 | ||
| 18 | #include <Swiften/Base/Log.h> | 19 | #include <Swiften/Base/Log.h> |
| @@ -40,10 +41,10 @@ namespace Swift { | |||
| 40 | JingleS5BTransportPayload::Candidate candidate; | 41 | JingleS5BTransportPayload::Candidate candidate; |
| 41 | candidate.cid = attributes.getAttributeValue("cid").get_value_or(""); | 42 | candidate.cid = attributes.getAttributeValue("cid").get_value_or(""); |
| 42 | 43 | ||
| 43 | int port = -1; | 44 | unsigned short port = 0; |
| 44 | try { | 45 | try { |
| 45 | port = boost::lexical_cast<int>(attributes.getAttributeValue("port").get_value_or("-1")); | 46 | port = boost::numeric_cast<unsigned short>(boost::lexical_cast<int>(attributes.getAttributeValue("port").get_value_or("0"))); |
| 46 | } catch(boost::bad_lexical_cast &) { } | 47 | } catch(...) { } |
| 47 | candidate.hostPort = HostAddressPort(HostAddress::fromString(attributes.getAttributeValue("host").get_value_or("")).get_value_or(HostAddress()), port); | 48 | candidate.hostPort = HostAddressPort(HostAddress::fromString(attributes.getAttributeValue("host").get_value_or("")).get_value_or(HostAddress()), port); |
| 48 | candidate.jid = JID(attributes.getAttributeValue("jid").get_value_or("")); | 49 | candidate.jid = JID(attributes.getAttributeValue("jid").get_value_or("")); |
| 49 | int priority = -1; | 50 | int priority = -1; |
diff --git a/Swiften/Parser/PayloadParsers/S5BProxyRequestParser.cpp b/Swiften/Parser/PayloadParsers/S5BProxyRequestParser.cpp index 502f400..7a5a1fd 100644 --- a/Swiften/Parser/PayloadParsers/S5BProxyRequestParser.cpp +++ b/Swiften/Parser/PayloadParsers/S5BProxyRequestParser.cpp | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | */ | 5 | */ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (c) 2015-2016 Isode Limited. | 8 | * Copyright (c) 2015-2018 Isode Limited. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * See the COPYING file for more information. | 10 | * See the COPYING file for more information. |
| 11 | */ | 11 | */ |
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <Swiften/Parser/PayloadParsers/S5BProxyRequestParser.h> | 13 | #include <Swiften/Parser/PayloadParsers/S5BProxyRequestParser.h> |
| 14 | 14 | ||
| 15 | #include <boost/lexical_cast.hpp> | 15 | #include <boost/lexical_cast.hpp> |
| 16 | #include <boost/numeric/conversion/cast.hpp> | ||
| 16 | #include <boost/optional.hpp> | 17 | #include <boost/optional.hpp> |
| 17 | 18 | ||
| 18 | namespace Swift { | 19 | namespace Swift { |
| @@ -27,15 +28,14 @@ void S5BProxyRequestParser::handleStartElement(const std::string& element, const | |||
| 27 | if (element == "streamhost") { | 28 | if (element == "streamhost") { |
| 28 | if (attributes.getAttributeValue("host") && attributes.getAttributeValue("jid") && attributes.getAttributeValue("port")) { | 29 | if (attributes.getAttributeValue("host") && attributes.getAttributeValue("jid") && attributes.getAttributeValue("port")) { |
| 29 | std::string host = attributes.getAttributeValue("host").get_value_or(""); | 30 | std::string host = attributes.getAttributeValue("host").get_value_or(""); |
| 30 | int port = -1; | 31 | unsigned short port = 0; |
| 31 | JID jid = attributes.getAttributeValue("jid").get_value_or(""); | 32 | JID jid = attributes.getAttributeValue("jid").get_value_or(""); |
| 32 | 33 | ||
| 33 | try { | 34 | try { |
| 34 | port = boost::lexical_cast<int>(attributes.getAttributeValue("port").get()); | 35 | port = boost::numeric_cast<unsigned short>(boost::lexical_cast<int>(attributes.getAttributeValue("port").get())); |
| 35 | } catch (boost::bad_lexical_cast &) { | 36 | } catch (...) { |
| 36 | port = -1; | ||
| 37 | } | 37 | } |
| 38 | if (!host.empty() && port != -1 && jid.isValid()) { | 38 | if (!host.empty() && port != 0 && jid.isValid()) { |
| 39 | S5BProxyRequest::StreamHost streamHost; | 39 | S5BProxyRequest::StreamHost streamHost; |
| 40 | streamHost.host = host; | 40 | streamHost.host = host; |
| 41 | streamHost.port = port; | 41 | streamHost.port = port; |
Swift