Skip to content

Commit

Permalink
Merge pull request #101 from andcscott/98-get_addr-should-return-neg
Browse files Browse the repository at this point in the history
common: get_addr should return -1 on error
  • Loading branch information
yarrick authored Oct 30, 2024
2 parents 68b0a7b + ae43de2 commit 2b65972
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 7 deletions.
16 changes: 9 additions & 7 deletions src/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ get_addr(char *host, int port, int addr_family, int flags, struct sockaddr_stora
struct addrinfo hints, *addr;
int res;
char portnum[8];
int addrlen;

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

res = getaddrinfo(host, portnum, &hints, &addr);
if (res == 0) {
int addrlen = addr->ai_addrlen;
/* Grab first result */
memcpy(out, addr->ai_addr, addr->ai_addrlen);
freeaddrinfo(addr);
return addrlen;
if (res != 0) {
return -1;
}
return res;

addrlen = addr->ai_addrlen;
/* Grab first result */
memcpy(out, addr->ai_addr, addr->ai_addrlen);
freeaddrinfo(addr);
return addrlen;
}

int
Expand Down
23 changes: 23 additions & 0 deletions tests/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,28 @@ START_TEST(test_parse_format_ipv4_mapped_ipv6)
}
END_TEST

START_TEST(test_get_addr_err)
{
char *host = "192.168.2.10";
struct sockaddr_storage addr;
int addr_len;
int flags = AI_PASSIVE;

/* Invalid host */
addr_len = get_addr(NULL, -1, flags, 0, &addr);
ck_assert(addr_len == -1);
/* Invalid port */
addr_len = get_addr(host, -1, flags, 0, &addr);
ck_assert(addr_len == -1);
/* Invalid flag */
addr_len = get_addr(host, 53, flags | 0xFFF, 0, &addr);
ck_assert(addr_len == -1);
/* Invalid addr */
addr_len = get_addr(host, 53, flags, 0, (struct sockaddr_storage *)NULL);
ck_assert(addr_len == -1);
}
END_TEST

TCase *
test_common_create_tests(void)
{
Expand All @@ -295,6 +317,7 @@ test_common_create_tests(void)
tcase_add_test(tc, test_query_datalen_wild);
tcase_add_test(tc, test_parse_format_ipv4);
tcase_add_test(tc, test_parse_format_ipv4_listen_all);
tcase_add_test(tc, test_get_addr_err);

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

0 comments on commit 2b65972

Please sign in to comment.