git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
DNS: explicit alloc/free of workspace
[exim.git]
/
src
/
src
/
dkim.c
diff --git
a/src/src/dkim.c
b/src/src/dkim.c
index a48f1a17af47e42b309e38118484ccee53f2f247..87c9c9197d7c309f463b6f381d1997558efe0a01 100644
(file)
--- a/
src/src/dkim.c
+++ b/
src/src/dkim.c
@@
-50,11
+50,14
@@
dkim_exim_query_dns_txt(const uschar * name)
dns_answer * dnsa = store_get_dns_answer();
dns_scan dnss;
rmark reset_point = store_mark();
dns_answer * dnsa = store_get_dns_answer();
dns_scan dnss;
rmark reset_point = store_mark();
-gstring * g =
NULL
;
+gstring * g =
string_get_tainted(256, TRUE)
;
lookup_dnssec_authenticated = NULL;
if (dns_lookup(dnsa, name, T_TXT, NULL) != DNS_SUCCEED)
lookup_dnssec_authenticated = NULL;
if (dns_lookup(dnsa, name, T_TXT, NULL) != DNS_SUCCEED)
+ {
+ store_free_dns_answer(dnsa);
return NULL; /*XXX better error detail? logging? */
return NULL; /*XXX better error detail? logging? */
+ }
/* Search for TXT record */
/* Search for TXT record */
@@
-81,6
+84,7
@@
for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS);
/* check if this looks like a DKIM record */
if (Ustrncmp(g->s, "v=", 2) != 0 || strncasecmp(CS g->s, "v=dkim", 6) == 0)
{
/* check if this looks like a DKIM record */
if (Ustrncmp(g->s, "v=", 2) != 0 || strncasecmp(CS g->s, "v=dkim", 6) == 0)
{
+ store_free_dns_answer(dnsa);
gstring_release_unused(g);
return string_from_gstring(g);
}
gstring_release_unused(g);
return string_from_gstring(g);
}
@@
-90,6
+94,7
@@
for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS);
bad:
store_reset(reset_point);
bad:
store_reset(reset_point);
+store_free_dns_answer(dnsa);
return NULL; /*XXX better error detail? logging? */
}
return NULL; /*XXX better error detail? logging? */
}