From: Jelte Jansen Date: Tue, 8 Mar 2005 13:49:00 +0000 (+0000) Subject: some memory fixes X-Git-Tag: release-0.50~289 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b2ef2a10caefcd71edf98d5b40abc61145fda677;p=thirdparty%2Fldns.git some memory fixes --- diff --git a/TODO b/TODO index c31efb31..2f5a41ae 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,9 @@ Current TODO list + Implementation: --------------- +o sync argument order in rdf_new and rdf_new_frm_data o deep free o check all conversion routines on missing types - wire2host diff --git a/configure.ac b/configure.ac index d01ff0d0..115a8edc 100644 --- a/configure.ac +++ b/configure.ac @@ -151,7 +151,7 @@ int b64_ntop(uint8_t const *src, size_t srclength, /*@unused@*/ static inline size_t b64_ntop_calculate_size(size_t srcsize) { - return ((((srcsize + 2) / 3) * 4) + 1); + return (((srcsize + 2) / 3) * 4); } #endif /* !B64_PTON */ #ifndef B64_NTOP @@ -162,7 +162,7 @@ int b64_pton(char const *src, uint8_t *target, size_t targsize); /*@unused@*/ static inline size_t b64_pton_calculate_size(size_t srcsize) { - return ((((srcsize - 1) / 4) * 3) - 2); + return ((((srcsize / 4) * 3) - 2) + 1); } #endif /* !B64_NTOP */ #ifndef TIMEGM diff --git a/dnssec.c b/dnssec.c index b9d5d3d1..31769443 100644 --- a/dnssec.c +++ b/dnssec.c @@ -490,12 +490,16 @@ ldns_create_tsig_mac( } /* hmac it */ /* 2 spare bytes for the length */ - mac_bytes = malloc(md_len); + mac_bytes = XMALLOC(unsigned char, md_len); memset(mac_bytes, 0, md_len); (void) HMAC(EVP_md5(), key_bytes, key_size, (void *)wireformat, wiresize, mac_bytes + 2, &md_len); write_uint16(mac_bytes, md_len); - mac_rdf = ldns_rdf_new(md_len + 2, LDNS_RDF_TYPE_INT16_DATA, mac_bytes); + mac_rdf = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_INT16_DATA, md_len + 2, mac_bytes); + + FREE(mac_bytes); + FREE(key_bytes); + ldns_buffer_free(data_buffer); return mac_rdf; } @@ -526,6 +530,7 @@ ldns_pkt_tsig_verify(ldns_pkt *pkt, ldns_rr *orig_tsig = ldns_pkt_tsig(pkt); if (!orig_tsig) { + ldns_rdf_free(key_name_rdf); return false; } @@ -560,6 +565,8 @@ ldns_pkt_tsig_verify(ldns_pkt *pkt, ldns_pkt_set_tsig(pkt, orig_tsig); ldns_pkt_set_id(pkt, pkt_id); + ldns_rdf_free(key_name_rdf); + /* TODO: ldns_rdf_cmp in rdata.[ch] */ if (ldns_rdf_size(pkt_mac_rdf) != ldns_rdf_size(my_mac_rdf)) { /* @@ -577,6 +584,7 @@ ldns_pkt_tsig_verify(ldns_pkt *pkt, } printf("\n"); */ + ldns_rdf_free(my_mac_rdf); return false; } else { for (i = 0; i < ldns_rdf_size(pkt_mac_rdf); i++) { @@ -599,11 +607,13 @@ ldns_pkt_tsig_verify(ldns_pkt *pkt, } printf("\n"); */ + ldns_rdf_free(my_mac_rdf); return false; } } } + ldns_rdf_free(my_mac_rdf); return true; } @@ -624,8 +634,7 @@ ldns_pkt_tsig_verify(ldns_pkt *pkt, ldns_status ldns_pkt_tsig_sign(ldns_pkt *pkt, const char *key_name, const char *key_data, uint16_t fudge, const char *algorithm_name, ldns_rdf *query_mac) { - unsigned char *key_bytes; - int key_size; + int key_size = 0; ldns_rr *tsig_rr; ldns_rdf *key_name_rdf = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, key_name); uint8_t *fudge_data; @@ -666,10 +675,6 @@ ldns_pkt_tsig_sign(ldns_pkt *pkt, const char *key_name, const char *key_data, ui write_uint16(error_data, 0); error_rdf = ldns_rdf_new(2, LDNS_RDF_TYPE_INT16, error_data); - /* prepare the key */ - key_bytes = XMALLOC(unsigned char, b64_pton_calculate_size(strlen(key_data))); - key_size = b64_pton(key_data, key_bytes, strlen(key_data) * 2); - if (key_size < 0) { return LDNS_STATUS_INVALID_B64; } diff --git a/host2str.c b/host2str.c index a8e0d27c..a491d4d7 100644 --- a/host2str.c +++ b/host2str.c @@ -641,15 +641,11 @@ ldns_rdf2buffer_str_int16_data(ldns_buffer *output, ldns_rdf *rdf) ldns_buffer_printf(output, "%u ", ldns_rdf_size(rdf)-2); - if (b64_ntop(ldns_rdf_data(rdf)+2, ldns_rdf_size(rdf)-2, b64, size)) { + if (ldns_rdf_size(rdf) > 2 && + b64_ntop(ldns_rdf_data(rdf)+2, ldns_rdf_size(rdf)-2, b64, size)) { ldns_buffer_printf(output, "%s", b64); } FREE(b64); -/* - if (ldns_rdf_size > 2) { - ldns_rdf2buffer_str_b64(output, rdf); - } -*/ return ldns_buffer_status(output); } diff --git a/run-test15.c b/run-test15.c index ebee424f..e1830272 100644 --- a/run-test15.c +++ b/run-test15.c @@ -46,8 +46,8 @@ main(int argc, char **argv) ldns_pkt_set_id(pkt, 46789); ldns_pkt_tsig_sign(pkt, "jelte.", "vBUWJnkgDw4YTobXtbUD6XED5Qg74tnghYX3tzKzfsI=", 300, "hmac-md5.sig-alg.reg.int", NULL); - mac = ldns_rr_rdf(ldns_pkt_tsig(pkt), 3); + /* test our own sign */ if (!ldns_pkt_tsig_verify(pkt, "jelte.", "vBUWJnkgDw4YTobXtbUD6XED5Qg74tnghYX3tzKzfsI=", NULL)) { printf("Can't verify my own sig :(\n"); @@ -57,7 +57,7 @@ main(int argc, char **argv) /* print the resulting pkt to stdout */ printf("QUERY:\n"); ldns_pkt_print(stdout, pkt); - + /* Send to resolver */ /* init */ @@ -69,7 +69,6 @@ main(int argc, char **argv) printf("error push nameserver\n"); return -1; } - answer = ldns_send(res, pkt); printf("\n\nANSWER:\n"); @@ -82,11 +81,11 @@ main(int argc, char **argv) } else { printf("Failed.\n"); } -/* + + ldns_pkt_free(answer); ldns_rdf_free(nameserver); - ldns_rdf_free(qname); ldns_pkt_free(pkt); ldns_resolver_free(res); -*/ + return 0; } diff --git a/run-test7.c b/run-test7.c index 28cc10b6..767862bc 100644 --- a/run-test7.c +++ b/run-test7.c @@ -23,7 +23,7 @@ main(int argc, char **argv) ldns_resolver *res; ldns_rdf *qname; ldns_rdf *nameserver; - ldns_rdf *default_dom; + /*ldns_rdf *default_dom;*/ ldns_pkt *pkt; char *server_ip = NULL; char *name = NULL; @@ -44,8 +44,8 @@ main(int argc, char **argv) /* create a default domain and add it */ - default_dom = ldns_dname_new_frm_str("miek.nl."); #if 0 + default_dom = ldns_dname_new_frm_str("miek.nl."); ldns_resolver_set_domain(res, default_dom); ldns_resolver_set_defnames(res, true); /* use the suffix */ #endif