]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
Fix ldns_native2rdf..
authorWouter Wijngaards <wouter@NLnetLabs.nl>
Tue, 6 Apr 2010 14:17:51 +0000 (14:17 +0000)
committerWouter Wijngaards <wouter@NLnetLabs.nl>
Tue, 6 Apr 2010 14:17:51 +0000 (14:17 +0000)
Changelog
rdata.c

index 318142eabfbe224e15e66e2fe2e9d283f6620549..68572292c1fcafaeda5fa9c4999abef603255774 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -18,6 +18,8 @@
          ldns_tcp_read_wire_timeout().
        * GOST support with correct algorithm numbers.
          OpenSSL 1.0.0 is necessary (or use --disable-gost).
+       * Fixed comment in rbtree.h about being first member and data ptr.
+       * Fixed possibly leak in case of out of memory in ldns_native2rdf...
 
 1.6.4  2010-01-20
        * Imported pyldns contribution by Zdenek Vasicek and Karel Slany.
diff --git a/rdata.c b/rdata.c
index 05f9122b73fae2ffe54d5c540baf37b7abc7f0b5..04bb3b13d2ef85f304823fc1771b17038990614e 100644 (file)
--- a/rdata.c
+++ b/rdata.c
@@ -132,34 +132,46 @@ ldns_rdf *
 ldns_native2rdf_int16(ldns_rdf_type type, uint16_t value)
 {
        uint16_t *rdf_data = LDNS_XMALLOC(uint16_t, 1);
+        ldns_rdf* rdf;
        if (!rdf_data) {
                return NULL;
        }
        ldns_write_uint16(rdf_data, value);
-       return ldns_rdf_new(type, LDNS_RDF_SIZE_WORD, rdf_data);
+       rdf = ldns_rdf_new(type, LDNS_RDF_SIZE_WORD, rdf_data);
+        if(!rdf)
+                LDNS_FREE(rdf_data);
+        return rdf;
 }
 
 ldns_rdf *
 ldns_native2rdf_int32(ldns_rdf_type type, uint32_t value)
 {
        uint32_t *rdf_data = LDNS_XMALLOC(uint32_t, 1);
+        ldns_rdf* rdf;
        if (!rdf_data) {
                return NULL;
        }
        ldns_write_uint32(rdf_data, value);
-       return ldns_rdf_new(type, LDNS_RDF_SIZE_DOUBLEWORD, rdf_data);
+       rdf = ldns_rdf_new(type, LDNS_RDF_SIZE_DOUBLEWORD, rdf_data);
+        if(!rdf)
+                LDNS_FREE(rdf_data);
+        return rdf;
 }
 
 ldns_rdf *
 ldns_native2rdf_int16_data(size_t size, uint8_t *data)
 {
        uint8_t *rdf_data = LDNS_XMALLOC(uint8_t, size + 2);
+        ldns_rdf* rdf;
        if (!rdf_data) {
                return NULL;
        }
        ldns_write_uint16(rdf_data, size);
        memcpy(rdf_data + 2, data, size);
-       return ldns_rdf_new(LDNS_RDF_TYPE_INT16_DATA, size + 2, rdf_data);
+       rdf = ldns_rdf_new(LDNS_RDF_TYPE_INT16_DATA, size + 2, rdf_data);
+        if(!rdf)
+                LDNS_FREE(rdf_data);
+        return rdf;
 }
 
 /* note: data must be allocated memory */