diff options
author | Dave Tapuska <dtapuska@chromium.org> | 2015-01-15 16:39:58 -0500 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-01-16 19:28:36 +0000 |
commit | 1eca7b2ae6b9f71d468ce494158ae4c4d43b8df3 (patch) | |
tree | 6dfc520dc6da1c3018c2f61f78f2b0e809b86b55 | |
parent | c39c9b07d1bd69229c73aa644672aba001c6d768 (diff) | |
download | peerd-1eca7b2ae6b9f71d468ce494158ae4c4d43b8df3.tar.gz |
peerd: ExposeService mdns port parsing
Allow the mdns.port to be specified as various types that
are compatible with integer. This allows the chrome dbus
bindings that write it out as a int32_t to work correctly.
BUG=chromium:441329
TEST=manual
Change-Id: Idc9f15a160417b7c7e20b2f5afabcbe4c6e09413
Reviewed-on: https://chromium-review.googlesource.com/240741
Reviewed-by: Christopher Wiley <wiley@chromium.org>
Tested-by: David Tapuska <dtapuska@chromium.org>
Commit-Queue: David Tapuska <dtapuska@chromium.org>
-rw-r--r-- | service.cc | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -4,6 +4,8 @@ #include "peerd/service.h" +#include <limits> + #include <base/strings/string_util.h> #include <chromeos/dbus/exported_object_manager.h> @@ -198,8 +200,10 @@ bool Service::ExtractMDnsOptions(chromeos::ErrorPtr* error, } auto port_it = mdns_options->find(kMDNSPort); if (port_it != mdns_options->end()) { - uint16_t* port_value = port_it->second.GetPtr<uint16_t>(); - if (port_value == nullptr) { + intmax_t port; + if (!port_it->second.IsConvertibleToInteger() || + (port = port_it->second.GetAsInteger()) < 0 || + port > std::numeric_limits<uint16_t>::max()) { Error::AddTo(error, FROM_HERE, kPeerdErrorDomain, @@ -207,7 +211,7 @@ bool Service::ExtractMDnsOptions(chromeos::ErrorPtr* error, "Invalid entry for mDNS port."); return false; } - parsed_mdns_options_.port = *port_value; + parsed_mdns_options_.port = static_cast<uint16_t>(port); mdns_options->erase(port_it); } if (!mdns_options->empty()) { |