summaryrefslogtreecommitdiffstats
path: root/native_client_sdk
diff options
context:
space:
mode:
Diffstat (limited to 'native_client_sdk')
-rw-r--r--native_client_sdk/src/libraries/nacl_io/host_resolver.cc7
-rw-r--r--native_client_sdk/src/tests/nacl_io_test/host_resolver_test.cc30
2 files changed, 35 insertions, 2 deletions
diff --git a/native_client_sdk/src/libraries/nacl_io/host_resolver.cc b/native_client_sdk/src/libraries/nacl_io/host_resolver.cc
index b8100a7..c16fbcb 100644
--- a/native_client_sdk/src/libraries/nacl_io/host_resolver.cc
+++ b/native_client_sdk/src/libraries/nacl_io/host_resolver.cc
@@ -2,9 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS
+#endif
+
#include "nacl_io/host_resolver.h"
#include <assert.h>
+#include <stdint.h>
#include <stdlib.h>
#include <string.h>
@@ -231,7 +236,7 @@ int HostResolver::getaddrinfo(const char* node,
if (service != NULL) {
char* cp;
port = strtol(service, &cp, 10);
- if (port > 0 && port <= 65535 && *cp == '\0') {
+ if (port >= 0 && port <= UINT16_MAX && *cp == '\0') {
port = htons(port);
} else {
return EAI_SERVICE;
diff --git a/native_client_sdk/src/tests/nacl_io_test/host_resolver_test.cc b/native_client_sdk/src/tests/nacl_io_test/host_resolver_test.cc
index fab3ec5..3aaec27 100644
--- a/native_client_sdk/src/tests/nacl_io_test/host_resolver_test.cc
+++ b/native_client_sdk/src/tests/nacl_io_test/host_resolver_test.cc
@@ -89,7 +89,7 @@ TEST_F(HostResolverTest, Getaddrinfo_Numeric) {
struct sockaddr_in* in;
struct addrinfo hints;
- // Numberic only
+ // Numeric only
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
@@ -107,6 +107,34 @@ TEST_F(HostResolverTest, Getaddrinfo_Numeric) {
ki_freeaddrinfo(ai);
}
+TEST_F(HostResolverTest, Getaddrinfo_NumericService) {
+ struct addrinfo* ai = NULL;
+ struct sockaddr_in* in;
+ struct addrinfo hints;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_INET;
+ hints.ai_socktype = SOCK_STREAM;
+
+ ASSERT_EQ(0, ki_getaddrinfo("1.2.3.4", "0", &hints, &ai));
+ ASSERT_NE(NULL_INFO, ai);
+ ASSERT_NE(NULL_ADDR, ai->ai_addr);
+ in = (struct sockaddr_in*)ai->ai_addr;
+ uint16_t expected_port = htons(0);
+ ASSERT_EQ(expected_port, in->sin_port);
+ ASSERT_EQ(NULL_INFO, ai->ai_next);
+ ki_freeaddrinfo(ai);
+
+ ASSERT_EQ(0, ki_getaddrinfo("1.2.3.4", "65000", &hints, &ai));
+ ASSERT_NE(NULL_INFO, ai);
+ ASSERT_NE(NULL_ADDR, ai->ai_addr);
+ in = (struct sockaddr_in*)ai->ai_addr;
+ expected_port = htons(65000);
+ ASSERT_EQ(expected_port, in->sin_port);
+ ASSERT_EQ(NULL_INFO, ai->ai_next);
+ ki_freeaddrinfo(ai);
+}
+
TEST_F(HostResolverTest, Getaddrinfo_MissingPPAPI) {
// Verify that full lookups fail due to lack of PPAPI interfaces
struct addrinfo* ai = NULL;