]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
nss_dns: In gaih_getanswer_slice, skip strange aliases (bug 12154)
authorFlorian Weimer <fweimer@redhat.com>
Tue, 30 Aug 2022 08:02:49 +0000 (10:02 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Tue, 20 Sep 2022 11:05:58 +0000 (13:05 +0200)
If the name is not a host name, skip adding it to the result, instead
of reporting query failure.  This fixes bug 12154 for getaddrinfo.

This commit still keeps the old parsing code, and only adjusts when
a host name is copied.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
(cherry picked from commit 32b599ac8c21c4c332cc3900a792a1395bca79c7)

resolv/nss_dns/dns-host.c

index b1bdb3018b6f72b86450ea364ed1819d9dc98e00..484a6289d506054b9be2c3f60d319222b3f0ca6f 100644 (file)
@@ -948,12 +948,12 @@ gaih_getanswer_slice (const querybuf *answer, int anslen, const char *qname,
 
          n = -1;
        }
-      if (__glibc_unlikely (n < 0 || __libc_res_hnok (buffer) == 0))
+      if (__glibc_unlikely (n < 0))
        {
          ++had_error;
          continue;
        }
-      if (*firstp && canon == NULL)
+      if (*firstp && canon == NULL && __libc_res_hnok (buffer))
        {
          h_name = buffer;
          buffer += h_namelen;
@@ -999,14 +999,14 @@ gaih_getanswer_slice (const querybuf *answer, int anslen, const char *qname,
 
          n = __libc_dn_expand (answer->buf, end_of_message, cp,
                                tbuf, sizeof tbuf);
-         if (__glibc_unlikely (n < 0 || __libc_res_hnok (tbuf) == 0))
+         if (__glibc_unlikely (n < 0))
            {
              ++had_error;
              continue;
            }
          cp += n;
 
-         if (*firstp)
+         if (*firstp && __libc_res_hnok (tbuf))
            {
              /* Reclaim buffer space.  */
              if (h_name + h_namelen == buffer)