summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorho <ho@openbsd.org>2001-08-16 18:16:43 +0000
committerho <ho@openbsd.org>2001-08-16 18:16:43 +0000
commit2fb8b66cdde0b00f6b13c0890692feffc32ea0d9 (patch)
tree4d49c93ad4eded23a418e5aee6fd617ed9e15201
parento) -mdoc syntax improvements; (diff)
downloadwireguard-openbsd-2fb8b66cdde0b00f6b13c0890692feffc32ea0d9.tar.xz
wireguard-openbsd-2fb8b66cdde0b00f6b13c0890692feffc32ea0d9.zip
Use calloc() to allocate response data. Be more careful when freeing
memory. jakob@ ok.
-rw-r--r--lib/libc/net/getrrsetbyname.c41
1 files changed, 25 insertions, 16 deletions
diff --git a/lib/libc/net/getrrsetbyname.c b/lib/libc/net/getrrsetbyname.c
index bc4b88bbbdf..87ae8fc229e 100644
--- a/lib/libc/net/getrrsetbyname.c
+++ b/lib/libc/net/getrrsetbyname.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getrrsetbyname.c,v 1.3 2001/08/07 10:16:00 deraadt Exp $ */
+/* $OpenBSD: getrrsetbyname.c,v 1.4 2001/08/16 18:16:43 ho Exp $ */
/*
* Copyright (c) 2001 Jakob Schlyter. All rights reserved.
@@ -253,20 +253,26 @@ freerrset(struct rrsetinfo *rrset)
if (rrset == NULL)
return;
- for (i = 0; i < rrset->rri_nrdatas; i++) {
- if (rrset->rri_rdatas[i].rdi_data == NULL)
- break;
- free(rrset->rri_rdatas[i].rdi_data);
+ if (rrset->rri_rdatas) {
+ for (i = 0; i < rrset->rri_nrdatas; i++) {
+ if (rrset->rri_rdatas[i].rdi_data == NULL)
+ break;
+ free(rrset->rri_rdatas[i].rdi_data);
+ }
+ free(rrset->rri_rdatas);
}
- free(rrset->rri_rdatas);
- for (i = 0; i < rrset->rri_nsigs; i++) {
- if (rrset->rri_sigs[i].rdi_data == NULL)
- break;
- free(rrset->rri_sigs[i].rdi_data);
+ if (rrset->rri_sigs) {
+ for (i = 0; i < rrset->rri_nsigs; i++) {
+ if (rrset->rri_sigs[i].rdi_data == NULL)
+ break;
+ free(rrset->rri_sigs[i].rdi_data);
+ }
+ free(rrset->rri_sigs);
}
- free(rrset->rri_sigs);
- free(rrset->rri_name);
+
+ if (rrset->rri_name)
+ free(rrset->rri_name);
free(rrset);
}
@@ -280,7 +286,7 @@ parse_dns_response(const char *answer, int size)
const char *cp;
/* allocate memory for the response */
- resp = malloc(sizeof(*resp));
+ resp = calloc(1, sizeof(*resp));
if (resp == NULL)
return (NULL);
@@ -453,7 +459,8 @@ free_dns_query(struct dns_query *p)
if (p == NULL)
return;
- free(p->name);
+ if (p->name)
+ free(p->name);
free_dns_query(p->next);
free(p);
}
@@ -464,8 +471,10 @@ free_dns_rr(struct dns_rr *p)
if (p == NULL)
return;
- free(p->name);
- free(p->rdata);
+ if (p->name)
+ free(p->name);
+ if (p->rdata)
+ free(p->rdata);
free_dns_rr(p->next);
free(p);
}