From e10739e398e90eb9571c5443549981197f816e93 Mon Sep 17 00:00:00 2001
From: ho <>
Date: Thu, 16 Aug 2001 18:16:43 +0000
Subject: Use calloc() to allocate response data. Be more careful when freeing
 memory. jakob@ ok.

---
 src/lib/libc/net/getrrsetbyname.c | 41 ++++++++++++++++++++++++---------------
 1 file changed, 25 insertions(+), 16 deletions(-)

(limited to 'src/lib')

diff --git a/src/lib/libc/net/getrrsetbyname.c b/src/lib/libc/net/getrrsetbyname.c
index bc4b88bbbd..87ae8fc229 100644
--- a/src/lib/libc/net/getrrsetbyname.c
+++ b/src/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);
 }
-- 
cgit v1.2.3-55-g6feb