gnunet

Main GNUnet Logic
Log | Files | Refs | Submodules | README | LICENSE

commit 2eb823b83f4584447c8a42f24164447854d4d813
parent a76d8e744543705a06734fd6e191262a51d700fb
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Mon, 29 Jun 2026 12:38:08 +0200

util: Fix data handling in dnsparser

Diffstat:
Msrc/lib/util/dnsparser.c | 15+++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/lib/util/dnsparser.c b/src/lib/util/dnsparser.c @@ -225,6 +225,7 @@ GNUNET_DNSPARSER_free_record (struct GNUNET_DNSPARSER_Record *r) case GNUNET_DNSPARSER_TYPE_NS: case GNUNET_DNSPARSER_TYPE_CNAME: + case GNUNET_DNSPARSER_TYPE_DNAME: case GNUNET_DNSPARSER_TYPE_PTR: GNUNET_free (r->data.hostname); break; @@ -571,7 +572,7 @@ GNUNET_DNSPARSER_parse_uri (const char *udp_payload, uri = GNUNET_new (struct GNUNET_DNSPARSER_UriRecord); uri->priority = ntohs (uri_bin.prio); uri->weight = ntohs (uri_bin.weight); - max_len = udp_payload_length - sizeof(struct GNUNET_TUN_DnsUriRecord); + max_len = udp_payload_length - *off - sizeof(struct GNUNET_TUN_DnsUriRecord); len = GNUNET_asprintf (&(uri->target), "%.*s", max_len, &udp_payload[*off]); (*off) += len; @@ -722,7 +723,16 @@ GNUNET_DNSPARSER_parse_record (const char *udp_payload, return GNUNET_SYSERR; } return GNUNET_OK; - + case GNUNET_DNSPARSER_TYPE_CERT: + r->data.cert = + GNUNET_DNSPARSER_parse_cert (udp_payload, + udp_payload_length, + off); + if ((NULL == r->data.cert) || (old_off + data_len != *off)) + { + GNUNET_break_op (0); + return GNUNET_SYSERR; + } default: r->data.raw.data = GNUNET_malloc (data_len); r->data.raw.data_len = data_len; @@ -833,6 +843,7 @@ GNUNET_DNSPARSER_duplicate_record (const struct GNUNET_DNSPARSER_Record *r) { case GNUNET_DNSPARSER_TYPE_NS: case GNUNET_DNSPARSER_TYPE_CNAME: + case GNUNET_DNSPARSER_TYPE_DNAME: case GNUNET_DNSPARSER_TYPE_PTR: { dup->data.hostname = GNUNET_strdup (r->data.hostname); break;