summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorho <>2001-08-16 18:16:43 +0000
committerho <>2001-08-16 18:16:43 +0000
commite10739e398e90eb9571c5443549981197f816e93 (patch)
treee33df12ab17c1d427664d7cc63eb2ead963335cc
parent17b2b4ae4a5f18948d5042343abdf044fe91a105 (diff)
downloadopenbsd-e10739e398e90eb9571c5443549981197f816e93.tar.gz
openbsd-e10739e398e90eb9571c5443549981197f816e93.tar.bz2
openbsd-e10739e398e90eb9571c5443549981197f816e93.zip
Use calloc() to allocate response data. Be more careful when freeing
memory. jakob@ ok.
-rw-r--r--src/lib/libc/net/getrrsetbyname.c41
1 files changed, 25 insertions, 16 deletions
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 @@
1/* $OpenBSD: getrrsetbyname.c,v 1.3 2001/08/07 10:16:00 deraadt Exp $ */ 1/* $OpenBSD: getrrsetbyname.c,v 1.4 2001/08/16 18:16:43 ho Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2001 Jakob Schlyter. All rights reserved. 4 * Copyright (c) 2001 Jakob Schlyter. All rights reserved.
@@ -253,20 +253,26 @@ freerrset(struct rrsetinfo *rrset)
253 if (rrset == NULL) 253 if (rrset == NULL)
254 return; 254 return;
255 255
256 for (i = 0; i < rrset->rri_nrdatas; i++) { 256 if (rrset->rri_rdatas) {
257 if (rrset->rri_rdatas[i].rdi_data == NULL) 257 for (i = 0; i < rrset->rri_nrdatas; i++) {
258 break; 258 if (rrset->rri_rdatas[i].rdi_data == NULL)
259 free(rrset->rri_rdatas[i].rdi_data); 259 break;
260 free(rrset->rri_rdatas[i].rdi_data);
261 }
262 free(rrset->rri_rdatas);
260 } 263 }
261 free(rrset->rri_rdatas);
262 264
263 for (i = 0; i < rrset->rri_nsigs; i++) { 265 if (rrset->rri_sigs) {
264 if (rrset->rri_sigs[i].rdi_data == NULL) 266 for (i = 0; i < rrset->rri_nsigs; i++) {
265 break; 267 if (rrset->rri_sigs[i].rdi_data == NULL)
266 free(rrset->rri_sigs[i].rdi_data); 268 break;
269 free(rrset->rri_sigs[i].rdi_data);
270 }
271 free(rrset->rri_sigs);
267 } 272 }
268 free(rrset->rri_sigs); 273
269 free(rrset->rri_name); 274 if (rrset->rri_name)
275 free(rrset->rri_name);
270 free(rrset); 276 free(rrset);
271} 277}
272 278
@@ -280,7 +286,7 @@ parse_dns_response(const char *answer, int size)
280 const char *cp; 286 const char *cp;
281 287
282 /* allocate memory for the response */ 288 /* allocate memory for the response */
283 resp = malloc(sizeof(*resp)); 289 resp = calloc(1, sizeof(*resp));
284 if (resp == NULL) 290 if (resp == NULL)
285 return (NULL); 291 return (NULL);
286 292
@@ -453,7 +459,8 @@ free_dns_query(struct dns_query *p)
453 if (p == NULL) 459 if (p == NULL)
454 return; 460 return;
455 461
456 free(p->name); 462 if (p->name)
463 free(p->name);
457 free_dns_query(p->next); 464 free_dns_query(p->next);
458 free(p); 465 free(p);
459} 466}
@@ -464,8 +471,10 @@ free_dns_rr(struct dns_rr *p)
464 if (p == NULL) 471 if (p == NULL)
465 return; 472 return;
466 473
467 free(p->name); 474 if (p->name)
468 free(p->rdata); 475 free(p->name);
476 if (p->rdata)
477 free(p->rdata);
469 free_dns_rr(p->next); 478 free_dns_rr(p->next);
470 free(p); 479 free(p);
471} 480}