Do not leak rr_name on failures inside ares_parse_aaaa_reply
authorJakub Hrozek <jhrozek@redhat.com>
Tue, 14 Jun 2011 14:46:13 +0000 (16:46 +0200)
committerJakub Hrozek <jhrozek@redhat.com>
Tue, 14 Jun 2011 14:46:13 +0000 (16:46 +0200)
ares_parse_aaaa_reply.c

index a0f524daa5f523e2ad4b17bc1aaa027c5990e52d..1fbe8389f74fd35f1fbf6a50d914246950bac8c7 100644 (file)
@@ -132,6 +132,7 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
       aptr += len;
       if (aptr + RRFIXEDSZ > abuf + alen)
         {
+          free(rr_name);
           status = ARES_EBADRESP;
           break;
         }
@@ -149,6 +150,7 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
             {
               if (aptr + sizeof(struct ares_in6_addr) > abuf + alen)
               {
+                free(rr_name);
                 status = ARES_EBADRESP;
                 break;
               }
@@ -159,6 +161,7 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
               struct ares_addr6ttl * const at = &addrttls[naddrs];
               if (aptr + sizeof(struct ares_in6_addr) > abuf + alen)
               {
+                free(rr_name);
                 status = ARES_EBADRESP;
                 break;
               }