diff options
Diffstat (limited to 'util/data')
| -rw-r--r-- | util/data/dname.h | 4 | ||||
| -rw-r--r-- | util/data/msgreply.c | 22 |
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)); |
