aboutsummaryrefslogtreecommitdiff
path: root/util/data
diff options
context:
space:
mode:
Diffstat (limited to 'util/data')
-rw-r--r--util/data/dname.h4
-rw-r--r--util/data/msgreply.c22
2 files changed, 20 insertions, 6 deletions
diff --git a/util/data/dname.h b/util/data/dname.h
index e37c11822b36..cb0f6735d924 100644
--- a/util/data/dname.h
+++ b/util/data/dname.h
@@ -261,7 +261,7 @@ int dname_is_root(uint8_t* dname);
* Snip off first label from a dname, returning the parent zone.
* @param dname: from what to strip off. uncompressed wireformat.
* @param len: length, adjusted to become less.
- * @return stripped off, or "." if input was ".".
+ * return stripped off, or "." if input was ".".
*/
void dname_remove_label(uint8_t** dname, size_t* len);
@@ -271,7 +271,7 @@ void dname_remove_label(uint8_t** dname, size_t* len);
* @param len: length, adjusted to become less.
* @param n: number of labels to strip off (from the left).
* if 0, nothing happens.
- * @return stripped off, or "." if input was ".".
+ * return stripped off, or "." if input was ".".
*/
void dname_remove_labels(uint8_t** dname, size_t* len, int n);
diff --git a/util/data/msgreply.c b/util/data/msgreply.c
index 4830b343f0f3..00272fd1c64e 100644
--- a/util/data/msgreply.c
+++ b/util/data/msgreply.c
@@ -329,7 +329,10 @@ parse_create_rrset(sldns_buffer* pkt, struct rrset_parse* pset,
return 0;
/* copy & decompress */
if(!parse_rr_copy(pkt, pset, *data)) {
- if(!region) free(*data);
+ if(!region) {
+ free(*data);
+ *data = NULL;
+ }
return 0;
}
return 1;
@@ -394,8 +397,13 @@ parse_copy_decompress_rrset(sldns_buffer* pkt, struct msg_parse* msg,
pk->rk.type = htons(pset->type);
pk->rk.rrset_class = pset->rrset_class;
/** read data part. */
- if(!parse_create_rrset(pkt, pset, &data, region))
+ if(!parse_create_rrset(pkt, pset, &data, region)) {
+ if(!region) {
+ free(pk->rk.dname);
+ pk->rk.dname = NULL;
+ }
return 0;
+ }
pk->entry.data = (void*)data;
pk->entry.key = (void*)pk;
pk->entry.hash = pset->hash;
@@ -825,9 +833,15 @@ log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep)
/* not particularly fast but flexible, make wireformat and print */
sldns_buffer* buf = sldns_buffer_new(65535);
struct regional* region = regional_create();
- if(!reply_info_encode(qinfo, rep, 0, rep->flags, buf, 0,
+ if(!(buf && region)) {
+ log_err("%s: log_dns_msg: out of memory", str);
+ sldns_buffer_free(buf);
+ regional_destroy(region);
+ return;
+ }
+ if(!reply_info_encode(qinfo, rep, 0, rep->flags, buf, 0,
region, 65535, 1, 0)) {
- log_info("%s: log_dns_msg: out of memory", str);
+ log_err("%s: log_dns_msg: out of memory", str);
} else {
char* s = sldns_wire2str_pkt(sldns_buffer_begin(buf),
sldns_buffer_limit(buf));