Check value at resplen2 if it is not NULL
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Tue, 8 Jul 2014 11:10:24 +0000 (16:40 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Tue, 8 Jul 2014 17:22:49 +0000 (22:52 +0530)
There was a typo in the previous patch due to which resplen2 was
checked for non-zero instead of the value at resplen2.  Fix that and
improve the condition by checking resplen2 for non-NULL (instead of
answerp2) and also adding the check in a third place.

ChangeLog
resolv/res_query.c

index 79d80c0..5892add 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2014-07-08  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
+       * resolv/res_query.c (__libc_res_nsearch): Dereference resplen2
+       after checking that it is non-NULL.
+
        * sysdeps/i386/dl-machine.h: Define ELF_MACHINE_NO_REL.
 
 2014-07-08  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
index 4e6612c..e4ee2a6 100644 (file)
@@ -384,7 +384,7 @@ __libc_res_nsearch(res_state statp,
                                              answerp2_malloced);
                if (ret > 0 || trailing_dot
                    /* If the second response is valid then we use that.  */
-                   || (ret == 0 && answerp2 != NULL && resplen2 > 0))
+                   || (ret == 0 && resplen2 != NULL && *resplen2 > 0))
                        return (ret);
                saved_herrno = h_errno;
                tried_as_is++;
@@ -424,8 +424,8 @@ __libc_res_nsearch(res_state statp,
                                                      answer, anslen, answerp,
                                                      answerp2, nanswerp2,
                                                      resplen2, answerp2_malloced);
-                       if (ret > 0 || (ret == 0 && answerp2 != NULL
-                                       && resplen2 > 0))
+                       if (ret > 0 || (ret == 0 && resplen2 != NULL
+                                       && *resplen2 > 0))
                                return (ret);
 
                        if (answerp && *answerp != answer) {
@@ -494,7 +494,8 @@ __libc_res_nsearch(res_state statp,
                                              answer, anslen, answerp,
                                              answerp2, nanswerp2, resplen2,
                                              answerp2_malloced);
-               if (ret > 0)
+               if (ret > 0 || (ret == 0 && resplen2 != NULL
+                               && *resplen2 > 0))
                        return (ret);
        }