diff --git a/src/dict.c b/src/dict.c index 11723899..51c5e951 100644 --- a/src/dict.c +++ b/src/dict.c @@ -499,13 +499,17 @@ getdns_indent(size_t indent) } /* getdns_indent */ static int -priv_getdns_bindata_is_dname(struct getdns_bindata *bindata) +priv_getdns_bindata_is_dname(getdns_bindata *bindata) { size_t i = 0, n_labels = 0; - while (i < bindata->size) { + + while (i < bindata->size && bindata->data[i]) { i += ((size_t)bindata->data[i]) + 1; n_labels++; } + if (i < bindata->size && !bindata->data[i]) + i++; + return i == bindata->size && n_labels > 1 && bindata->data[bindata->size - 1] == 0; } diff --git a/src/util-internal.c b/src/util-internal.c index 52c715b6..bdb0ba8c 100644 --- a/src/util-internal.c +++ b/src/util-internal.c @@ -513,7 +513,8 @@ priv_getdns_create_reply_dict(getdns_context *context, getdns_network_req *req, uint8_t canonical_name_space[256], *canonical_name = canonical_name_space; uint8_t owner_name_space[256], *owner_name; - size_t canonical_name_len = 256, owner_name_len; + size_t canonical_name_len = sizeof(canonical_name_space), + owner_name_len = sizeof(owner_name_space); int new_canonical = 0; uint16_t rr_type; getdns_dict *header = NULL; @@ -546,6 +547,7 @@ priv_getdns_create_reply_dict(getdns_context *context, getdns_network_req *req, goto error; canonical_name = req->owner->name; + canonical_name_len = req->owner->name_len; for ( rr_iter = priv_getdns_rr_iter_init(&rr_iter_storage , req->response