]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
memory management
authorJelte Jansen <jeltejan@NLnetLabs.nl>
Thu, 19 May 2005 14:24:47 +0000 (14:24 +0000)
committerJelte Jansen <jeltejan@NLnetLabs.nl>
Thu, 19 May 2005 14:24:47 +0000 (14:24 +0000)
dnssec.c
ldns/dnssec.h
resolver.c
rr.c

index 007fb3c4da1c987d7ef54a18a56e0cd93a77fba4..beaf0c6efa4f5780b6be1c7011c096c105887736 100644 (file)
--- a/dnssec.c
+++ b/dnssec.c
@@ -347,7 +347,9 @@ ldns_verify_rrsig(ldns_rr_list *rrset, ldns_rr *rrsig, ldns_rr *key)
        }
 
        /* no longer needed */
+/*
        ldns_rr_list_free(rrset_clone);
+*/
        ldns_buffer_free(rawsig_buf);
        ldns_buffer_free(verify_buf);
        return result;
index c3b7e9e670e5722f8e8a0a6e65a26a781d36ed25..7fdf03d3912f3443d1904aa83e64a2a80bd1ec57 100644 (file)
@@ -53,7 +53,7 @@ uint16_t ldns_calc_keytag(ldns_rr *key);
  * \param[in] rrset the rrset to verify
  * \param[in] rrsig a list of signatures to check
  * \param[in] keys a list of keys to check with
- * \return a list of keys which validate the rrsig or NULL if not
+ * \return a list of keys that validate one of the signatures
  */
 ldns_rr_list* ldns_verify(ldns_rr_list *rrset, ldns_rr_list *rrsig, ldns_rr_list *keys);       
 
index 532c5314daaaf2809e5218740f200238691ba9f9..eb0289eb165ba3bc882c8f0052a3daa1ee396fd8 100644 (file)
@@ -595,7 +595,7 @@ ldns_resolver_query(ldns_resolver *r, ldns_rdf *name, ldns_rr_type type, ldns_rr
        }
        if (!ldns_resolver_domain(r)) {
                /* _defnames is set, but the domain is not....?? */
-               status - ldns_resolver_send(&pkt, r, name, type, class, flags);
+               status = ldns_resolver_send(&pkt, r, name, type, class, flags);
                return pkt;
        }
 
diff --git a/rr.c b/rr.c
index 12a62ccf60ddfa0ec71b61cb0c994875c95a9d07..f4d4d217e9105c9fba546d5175fbb54c0986c81f 100644 (file)
--- a/rr.c
+++ b/rr.c
@@ -261,6 +261,11 @@ ldns_rr_new_frm_str(const char *str)
                        }
        }
        
+
+       LDNS_FREE(rd);
+       LDNS_FREE(rd_buf);
+       ldns_buffer_free(rr_buf);
+
        LDNS_FREE(rdata);
        return new;
 }
@@ -688,7 +693,9 @@ ldns_rr_list_deep_clone(ldns_rr_list *rrlist)
                return NULL;
        }
        for (i = 0; i < ldns_rr_list_rr_count(rrlist); i++) {
-               r = ldns_rr_list_rr(rrlist, i);
+               r = ldns_rr_deep_clone(
+                       ldns_rr_list_rr(rrlist, i)
+                   );
                if (!r) {
                        /* huh, failure in cloning */
                        return NULL;
@@ -741,19 +748,29 @@ ldns_rr_compare(const ldns_rr *rr1, const ldns_rr *rr2)
                rr2_buf = ldns_buffer_new(rr2_len);
 
                if (ldns_rr2buffer_wire(rr1_buf, rr1, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
+                       ldns_buffer_free(rr1_buf);
+                       ldns_buffer_free(rr2_buf);
                        return 0; 
                }
                if (ldns_rr2buffer_wire(rr2_buf, rr2, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
+                       ldns_buffer_free(rr1_buf);
+                       ldns_buffer_free(rr2_buf);
                        return 0;
                }
                /* now compare the buffer's byte for byte */
                for(i = 0; i < rr1_len; i++) {
                        if (*ldns_buffer_at(rr1_buf,i) < *ldns_buffer_at(rr2_buf,i)) {
+                               ldns_buffer_free(rr1_buf);
+                               ldns_buffer_free(rr2_buf);
                                return -1;
                        } else if (*ldns_buffer_at(rr1_buf,i) > *ldns_buffer_at(rr2_buf,i)) {
+                               ldns_buffer_free(rr1_buf);
+                               ldns_buffer_free(rr2_buf);
                                return +1;
                        }
                }
+               ldns_buffer_free(rr1_buf);
+               ldns_buffer_free(rr2_buf);
                return 0;
        }
 }