Skip to content

Commit 2b65972

Browse files
authored
Merge pull request #101 from andcscott/98-get_addr-should-return-neg
common: get_addr should return -1 on error
2 parents 68b0a7b + ae43de2 commit 2b65972

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

src/common.c

+9-7
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ get_addr(char *host, int port, int addr_family, int flags, struct sockaddr_stora
142142
struct addrinfo hints, *addr;
143143
int res;
144144
char portnum[8];
145+
int addrlen;
145146

146147
memset(portnum, 0, sizeof(portnum));
147148
snprintf(portnum, sizeof(portnum) - 1, "%d", port);
@@ -158,14 +159,15 @@ get_addr(char *host, int port, int addr_family, int flags, struct sockaddr_stora
158159
hints.ai_protocol = IPPROTO_UDP;
159160

160161
res = getaddrinfo(host, portnum, &hints, &addr);
161-
if (res == 0) {
162-
int addrlen = addr->ai_addrlen;
163-
/* Grab first result */
164-
memcpy(out, addr->ai_addr, addr->ai_addrlen);
165-
freeaddrinfo(addr);
166-
return addrlen;
162+
if (res != 0) {
163+
return -1;
167164
}
168-
return res;
165+
166+
addrlen = addr->ai_addrlen;
167+
/* Grab first result */
168+
memcpy(out, addr->ai_addr, addr->ai_addrlen);
169+
freeaddrinfo(addr);
170+
return addrlen;
169171
}
170172

171173
int

tests/common.c

+23
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,28 @@ START_TEST(test_parse_format_ipv4_mapped_ipv6)
280280
}
281281
END_TEST
282282

283+
START_TEST(test_get_addr_err)
284+
{
285+
char *host = "192.168.2.10";
286+
struct sockaddr_storage addr;
287+
int addr_len;
288+
int flags = AI_PASSIVE;
289+
290+
/* Invalid host */
291+
addr_len = get_addr(NULL, -1, flags, 0, &addr);
292+
ck_assert(addr_len == -1);
293+
/* Invalid port */
294+
addr_len = get_addr(host, -1, flags, 0, &addr);
295+
ck_assert(addr_len == -1);
296+
/* Invalid flag */
297+
addr_len = get_addr(host, 53, flags | 0xFFF, 0, &addr);
298+
ck_assert(addr_len == -1);
299+
/* Invalid addr */
300+
addr_len = get_addr(host, 53, flags, 0, (struct sockaddr_storage *)NULL);
301+
ck_assert(addr_len == -1);
302+
}
303+
END_TEST
304+
283305
TCase *
284306
test_common_create_tests(void)
285307
{
@@ -295,6 +317,7 @@ test_common_create_tests(void)
295317
tcase_add_test(tc, test_query_datalen_wild);
296318
tcase_add_test(tc, test_parse_format_ipv4);
297319
tcase_add_test(tc, test_parse_format_ipv4_listen_all);
320+
tcase_add_test(tc, test_get_addr_err);
298321

299322
/* Tests require IPv6 support */
300323
sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);

0 commit comments

Comments
 (0)