summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Tapuska <dtapuska@chromium.org>2015-01-15 16:39:58 -0500
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-01-16 19:28:36 +0000
commit1eca7b2ae6b9f71d468ce494158ae4c4d43b8df3 (patch)
tree6dfc520dc6da1c3018c2f61f78f2b0e809b86b55
parentc39c9b07d1bd69229c73aa644672aba001c6d768 (diff)
downloadpeerd-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.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/service.cc b/service.cc
index 0f9b569..78c2d58 100644
--- a/service.cc
+++ b/service.cc
@@ -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()) {