]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
resolv: Check for inet_ntop failure in ns_sprintrrf
authorFlorian Weimer <fweimer@redhat.com>
Fri, 19 Jun 2026 16:22:20 +0000 (18:22 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Fri, 19 Jun 2026 16:22:20 +0000 (18:22 +0200)
This makes the output more consistent (either failure or complete
output) and helps with systematic testing with varying buffer
sizes.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
resolv/ns_print.c

index 3d38876483ac1a31fe8c196e6fffefea1b5fdf8e..e58df5f35a8f64030695dff6c2c8886b8ab2955e 100644 (file)
@@ -167,8 +167,9 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
        switch (type) {
        case ns_t_a:
          if (rdlen != (size_t)NS_INADDRSZ)
-                       goto formerr;
-               (void) inet_ntop(AF_INET, rdata, buf, buflen);
+                 goto formerr;
+               if (inet_ntop (AF_INET, rdata, buf, buflen) == NULL)
+                 return -1;
                addlen(strlen(buf), &buf, &buflen);
                break;
 
@@ -334,9 +335,10 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
            }
 
        case ns_t_aaaa:
-         if (rdlen != (size_t)NS_IN6ADDRSZ)
-                       goto formerr;
-               (void) inet_ntop(AF_INET6, rdata, buf, buflen);
+               if (rdlen != (size_t)NS_IN6ADDRSZ)
+                 goto formerr;
+               if (inet_ntop (AF_INET6, rdata, buf, buflen) == NULL)
+                 return -1;
                addlen(strlen(buf), &buf, &buflen);
                break;
 
@@ -427,7 +429,8 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
                        goto formerr;
 
                /* Address. */
-               (void) inet_ntop(AF_INET, rdata, buf, buflen);
+               if (inet_ntop (AF_INET, rdata, buf, buflen) == NULL)
+                 return -1;
                addlen(strlen(buf), &buf, &buflen);
                rdata += NS_INADDRSZ;
 
@@ -569,7 +572,8 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
                        if (rdata + pbyte >= edata) goto formerr;
                        memset(&a, 0, sizeof(a));
                        memcpy(&a.s6_addr[pbyte], rdata, sizeof(a) - pbyte);
-                       (void) inet_ntop(AF_INET6, &a, buf, buflen);
+                       if (inet_ntop (AF_INET6, &a, buf, buflen) == NULL)
+                         return -1;
                        addlen(strlen(buf), &buf, &buflen);
                        rdata += sizeof(a) - pbyte;
                }