]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
free prev and origin after failing reading root hints.
authorMatthijs Mekking <matje@nlnetlabs.nl>
Thu, 3 Jul 2008 14:01:15 +0000 (14:01 +0000)
committerMatthijs Mekking <matje@nlnetlabs.nl>
Thu, 3 Jul 2008 14:01:15 +0000 (14:01 +0000)
note:
valgrind still complains about the following:

==19935==    by 0x40581E1: ldns_key_buf2rsa_raw (dnssec.c:421)
==19935==    by 0x40B1151: dnskey_verify_rrset_sig (val_sigcrypt.c:1265)

git-svn-id: file:///svn/unbound/trunk@1144 be551aaa-1e26-0410-a405-d3ace91eadb9

iterator/iter_hints.c

index 7e0aca4d6a6d1f60d4c3e6713e4fc006748ee2db..aed716cef7c59cf4f6be29b7912837aaec23525b 100644 (file)
@@ -334,23 +334,20 @@ read_root_hints(struct iter_hints* hints, char* fname)
                if(status != LDNS_STATUS_OK) {
                        log_err("reading root hints %s %d: %s", fname,
                                lineno, ldns_get_errorstr_by_id(status));
-                       fclose(f);
-                       return 0;
+                       goto stop_read;
                }
                if(ldns_rr_get_type(rr) == LDNS_RR_TYPE_NS) {
                        if(!delegpt_add_ns(dp, hints->region,
                                ldns_rdf_data(ldns_rr_rdf(rr, 0)))) {
                                log_err("out of memory reading root hints");
-                               fclose(f);
-                               return 0;
+                               goto stop_read;
                        }
                        c = ldns_rr_get_class(rr);
                        if(!dp->name) {
                                if(!delegpt_set_name(dp, hints->region, 
                                        ldns_rdf_data(ldns_rr_owner(rr)))){
                                        log_err("out of memory.");
-                                       fclose(f);
-                                       return 0;
+                                       goto stop_read;
                                }
                        }
                } else if(ldns_rr_get_type(rr) == LDNS_RR_TYPE_A) {
@@ -366,8 +363,7 @@ read_root_hints(struct iter_hints* hints, char* fname)
                                        ldns_rdf_size(ldns_rr_owner(rr)),
                                        (struct sockaddr_storage*)&sa, len)) {
                                log_err("out of memory reading root hints");
-                               fclose(f);
-                               return 0;
+                               goto stop_read;
                        }
                } else if(ldns_rr_get_type(rr) == LDNS_RR_TYPE_AAAA) {
                        struct sockaddr_in6 sa;
@@ -382,8 +378,7 @@ read_root_hints(struct iter_hints* hints, char* fname)
                                        ldns_rdf_size(ldns_rr_owner(rr)),
                                        (struct sockaddr_storage*)&sa, len)) {
                                log_err("out of memory reading root hints");
-                               fclose(f);
-                               return 0;
+                               goto stop_read;
                        }
                } else {
                        log_warn("root hints %s:%d skipping type %d",
@@ -392,6 +387,11 @@ read_root_hints(struct iter_hints* hints, char* fname)
 
                ldns_rr_free(rr);
        }
+
+       if (origin)
+               ldns_rdf_deep_free(origin);
+       if (prev_rr)
+               ldns_rdf_deep_free(prev_rr);
        fclose(f);
        if(!dp->name) {
                log_warn("root hints %s: no NS content", fname);
@@ -402,6 +402,14 @@ read_root_hints(struct iter_hints* hints, char* fname)
        }
        delegpt_log(VERB_QUERY, dp);
        return 1;
+
+stop_read:
+       if (origin)
+               ldns_rdf_deep_free(origin);
+       if (prev_rr)
+               ldns_rdf_deep_free(prev_rr);
+       fclose(f);
+       return 0;
 }
 
 /** read root hints list */