After calling getaddrinfo(3) we check the size of the returned socket
address to match for AF-specific cases, but I fail to see how this is
even possible.
`hints.ai_family' is set appropiately and `res->ai_family' is checked,
so `res->ai_addrlen' is guaranteed to be correct.
It seems like this is a leftover from before florian@ reworked ping
to use getaddrinfo(3) and eventually merged it with ping6.
None of my test scenarios could trigger this error.
Do I miss something here or is this OK to remove?
Index: ping.c
===================================================================
RCS file: /cvs/src/sbin/ping/ping.c,v
retrieving revision 1.228
diff -u -p -r1.228 ping.c
--- ping.c 21 Jul 2018 07:27:54 -0000 1.228
+++ ping.c 13 Oct 2018 18:14:00 -0000
@@ -449,14 +449,10 @@ main(int argc, char *argv[])
switch (res->ai_family) {
case AF_INET:
- if (res->ai_addrlen != sizeof(dst4))
- errx(1, "size of sockaddr mismatch");
dst = (struct sockaddr *)&dst4;
from = (struct sockaddr *)&from4;
break;
case AF_INET6:
- if (res->ai_addrlen != sizeof(dst6))
- errx(1, "size of sockaddr mismatch");
dst = (struct sockaddr *)&dst6;
from = (struct sockaddr *)&from6;
break;
@@ -488,8 +484,6 @@ main(int argc, char *argv[])
hints.ai_family = dst->sa_family;
if ((error = getaddrinfo(source, NULL, &hints, &res)))
errx(1, "%s: %s", source, gai_strerror(error));
- if (res->ai_addrlen != dst->sa_len)
- errx(1, "size of sockaddr mismatch");
memcpy(from, res->ai_addr, res->ai_addrlen);
freeaddrinfo(res);