]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
dname_cat modifies left hand instead of acting the same as clone (data from 2 is...
authorJelte Jansen <jeltejan@NLnetLabs.nl>
Mon, 27 Jun 2005 13:13:42 +0000 (13:13 +0000)
committerJelte Jansen <jeltejan@NLnetLabs.nl>
Mon, 27 Jun 2005 13:13:42 +0000 (13:13 +0000)
some memory changes

dname.c
ldns/dname.h
mx.c
net.c
packet.c
rr.c

diff --git a/dname.c b/dname.c
index a1ff7af59f8f3da6a62f6497f0d6dcec22036430..c9cd3f19de93708a72d895620240eee90ffa538a 100644 (file)
--- a/dname.c
+++ b/dname.c
@@ -58,35 +58,23 @@ ldns_dname_cat_clone(ldns_rdf *rd1, ldns_rdf *rd2)
  * or do we modify rd1 inplace?
  * I guess the latter is better... MG... ?
  */
-ldns_rdf *
+ldns_status
 ldns_dname_cat(ldns_rdf *rd1, ldns_rdf *rd2)
 {
-       ldns_rdf *new;
-       uint16_t new_size;
-       uint8_t *buf;
+       uint16_t size;
 
        if (ldns_rdf_get_type(rd1) != LDNS_RDF_TYPE_DNAME ||
                        ldns_rdf_get_type(rd2) != LDNS_RDF_TYPE_DNAME)
        {
-               return NULL;
-       }
-
-       /* we overwrite the nullbyte of rd1 */
-       new_size = ldns_rdf_size(rd1) + ldns_rdf_size(rd2) - 1;
-       buf = LDNS_XMALLOC(uint8_t, new_size);
-       if (!buf) {
-               return NULL;
+               return LDNS_STATUS_ERR;
        }
 
-       /* put the two dname's after each other */
-       memcpy(buf, ldns_rdf_data(rd1), ldns_rdf_size(rd1) - 1);
-       memcpy(buf + ldns_rdf_size(rd1) - 1,
-                       ldns_rdf_data(rd2), ldns_rdf_size(rd2));
-       
-       new = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_DNAME, new_size, buf);
+       size = ldns_rdf_size(rd1) + ldns_rdf_size(rd2) - 1;
+       ldns_rdf_set_data(rd1, LDNS_XREALLOC(ldns_rdf_data(rd1), uint8_t, size));
+       memcpy(ldns_rdf_data(rd1) + ldns_rdf_size(rd1) - 1, ldns_rdf_data(rd2), ldns_rdf_size(rd2));
+       ldns_rdf_set_size(rd1, size);
 
-       LDNS_FREE(buf);
-       return new;
+       return LDNS_STATUS_OK;
 }
 
 ldns_rdf *
index 09bb2fc3eb5aa500c068360a09209e9a55fa8797..2fcce14eedab30a995c20f8dad1bf42bfc2849b2 100644 (file)
  * \return a new rdf with leftside/rightside
  */
 ldns_rdf       *ldns_dname_cat_clone(ldns_rdf *rd1, ldns_rdf *rd2);
+/**
+ * concatenates rd2 after rd1 (rd2 is copied, rd1 is modified)
+ * \param[in] rd1 the leftside
+ * \param[in] rd2 the rightside
+ * \return LDNS_STATUS_OK on success
+ */
+ldns_status    *ldns_dname_cat(ldns_rdf *rd1, ldns_rdf *rd2);
 /**
  * chop one label off a dname. so 
  * wwww.nlnetlabs.nl, becomes nlnetlabs.nl
diff --git a/mx.c b/mx.c
index 4a8c0ddba7657430c8ae9f6e3c48609e13098c48..355fdbd04581ab17370e68e520c0125c912ffbd9 100644 (file)
--- a/mx.c
+++ b/mx.c
@@ -43,6 +43,7 @@ main(int argc, char *argv[])
 
        /* create a new resolver from /etc/resolv.conf */
        res = ldns_resolver_new_frm_file(NULL);
+
        if (!res) {
                exit(1);
        }
@@ -51,6 +52,9 @@ main(int argc, char *argv[])
         * records of the domain given on the command line
         */
        p = ldns_resolver_query(res, domain, LDNS_RR_TYPE_MX, LDNS_RR_CLASS_IN, LDNS_RD);
+
+       ldns_rdf_deep_free(domain);
+       
         if (!p)  {
                exit(1);
         } else {
@@ -62,13 +66,18 @@ main(int argc, char *argv[])
                        fprintf(stderr, 
                                        " *** invalid answer name %s after MX query for %s\n",
                                        argv[1], argv[1]);
+                        ldns_pkt_free(p);
+                        ldns_resolver_deep_free(res);
                        exit(1);
                } else {
                        /* sort the list nicely */
                        /* ldns_rr_list_sort(mx); */
                        /* print the rrlist to stdout */
                        ldns_rr_list_print(stdout, mx);
+                       ldns_rr_list_deep_free(mx);
                }
         }
+        ldns_pkt_free(p);
+        ldns_resolver_deep_free(res);
         return 0;
 }
diff --git a/net.c b/net.c
index 323a9f985f23c1999ffa5af68ea83074aaeb5360..d31e444539e4e21e299611eaf2103f10f3db5562 100644 (file)
--- a/net.c
+++ b/net.c
@@ -65,6 +65,7 @@ ldns_send(ldns_pkt **result, ldns_resolver *r, ldns_pkt *query_pkt)
        }
 
        if (ldns_pkt2buffer_wire(qb, query_pkt) != LDNS_STATUS_OK) {
+               ldns_buffer_free(qb);
                return LDNS_STATUS_ERR;
        }
        /* random should already be setup - isn't so bad
@@ -112,6 +113,7 @@ ldns_send(ldns_pkt **result, ldns_resolver *r, ldns_pkt *query_pkt)
                                break;
                        default:
                                LDNS_FREE(ns);
+                               ldns_buffer_free(qb);
                                return LDNS_STATUS_ERR;
                }
                
@@ -128,6 +130,7 @@ ldns_send(ldns_pkt **result, ldns_resolver *r, ldns_pkt *query_pkt)
                if (!reply_bytes) {
                        if (ldns_resolver_fail(r)) {
                                LDNS_FREE(ns);
+                               ldns_buffer_free(qb);
                                return LDNS_STATUS_ERR;
                        } else {
                                continue;
@@ -138,6 +141,7 @@ ldns_send(ldns_pkt **result, ldns_resolver *r, ldns_pkt *query_pkt)
                    LDNS_STATUS_OK) {
                        LDNS_FREE(reply_bytes);
                        LDNS_FREE(ns);
+                       ldns_buffer_free(qb);
                        return LDNS_STATUS_ERR;
                }
                
index f2fad9416f07c8a794f704593545a4420f2bd0de..0d0f424a54a07876f2aa4af680ac56dd6a14a67f 100644 (file)
--- a/packet.c
+++ b/packet.c
@@ -285,6 +285,8 @@ ldns_pkt_rr_list_by_type(ldns_pkt *packet, ldns_rr_type type, ldns_pkt_section s
                                             );
                }
        }
+       ldns_rr_list_deep_free(rrs);
+
        if (ldns_rr_list_rr_count(new) == 0) {
                ldns_rr_list_free(new);
                return NULL;
diff --git a/rr.c b/rr.c
index 34fbabc608d78c1261ffa1b08a14fcb70feb778d..7cc400ecdc555a13e9100c098672b35096223cfd 100644 (file)
--- a/rr.c
+++ b/rr.c
@@ -772,6 +772,7 @@ ldns_rr_list_clone(ldns_rr_list *rrlist)
                    );
                if (!r) {
                        /* huh, failure in cloning */
+                       ldns_rr_list_free(new_list);
                        return NULL;
                }
                ldns_rr_list_push_rr(new_list, r);