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);
 

Reply via email to