summaryrefslogtreecommitdiff
path: root/ares_parse_ptr_reply.c
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2011-06-14 16:52:32 +0200
committerJakub Hrozek <jhrozek@redhat.com>2011-06-14 16:52:32 +0200
commit09f8a05573e3b94c50f0f8f72e39c48f24b7cf43 (patch)
tree3242bf2183a288478a29dfc96b640deac2722070 /ares_parse_ptr_reply.c
parenta1116723d40b402d0690061c1b23858c33953d79 (diff)
downloadc-ares-09f8a05573e3b94c50f0f8f72e39c48f24b7cf43.tar.gz
c-ares-09f8a05573e3b94c50f0f8f72e39c48f24b7cf43.tar.bz2
c-ares-09f8a05573e3b94c50f0f8f72e39c48f24b7cf43.zip
Do not leak rr_name on failures inside ares_parse_ptr_reply
Diffstat (limited to 'ares_parse_ptr_reply.c')
-rw-r--r--ares_parse_ptr_reply.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/ares_parse_ptr_reply.c b/ares_parse_ptr_reply.c
index 9d5a8b5..3b6dbc3 100644
--- a/ares_parse_ptr_reply.c
+++ b/ares_parse_ptr_reply.c
@@ -99,6 +99,7 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
aptr += len;
if (aptr + RRFIXEDSZ > abuf + alen)
{
+ free(rr_name);
status = ARES_EBADRESP;
break;
}
@@ -114,13 +115,17 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
&len);
if (status != ARES_SUCCESS)
- break;
+ {
+ free(rr_name);
+ break;
+ }
if (hostname)
free(hostname);
hostname = rr_data;
aliases[aliascnt] = malloc((strlen(rr_data)+1) * sizeof(char));
if (!aliases[aliascnt])
{
+ free(rr_name);
status = ARES_ENOMEM;
break;
}
@@ -131,6 +136,7 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
alias_alloc *= 2;
ptr = realloc(aliases, alias_alloc * sizeof(char *));
if(!ptr) {
+ free(rr_name);
status = ARES_ENOMEM;
break;
}
@@ -144,7 +150,10 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
&len);
if (status != ARES_SUCCESS)
- break;
+ {
+ free(rr_name);
+ break;
+ }
free(ptrname);
ptrname = rr_data;
}