From bf70d4840cea4ec78579459698ab9b6a7bc76dfb Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 17 Apr 2024 09:40:05 +1000 Subject: [PATCH 1/2] dns_qpkey_toname failed to reset name correctly This could lead to a mismatch between name->length and the rest of the name structure. --- lib/dns/qp.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/dns/qp.c b/lib/dns/qp.c index dff011ba66..686c3561f5 100644 --- a/lib/dns/qp.c +++ b/lib/dns/qp.c @@ -259,13 +259,12 @@ dns_qpkey_toname(const dns_qpkey_t key, size_t keylen, dns_name_t *name) { REQUIRE(name->buffer != NULL); REQUIRE(name->offsets != NULL); + dns_name_reset(name); + if (keylen == 0) { - dns_name_reset(name); return; } - isc_buffer_clear(name->buffer); - /* Scan the key looking for label boundaries */ for (offset = 0; offset <= keylen; offset++) { INSIST(key[offset] >= SHIFT_NOBYTE && From 36c11d9180771d3e42716c7dd22a168c9f407e77 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 17 Apr 2024 10:00:33 +1000 Subject: [PATCH 2/2] Check that name is properly reset by dns_qpkey_toname --- tests/dns/qp_test.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/dns/qp_test.c b/tests/dns/qp_test.c index 7dc0f68c2a..6938cb9fd8 100644 --- a/tests/dns/qp_test.c +++ b/tests/dns/qp_test.c @@ -94,6 +94,7 @@ ISC_RUN_TEST_IMPL(qpkey_name) { dns_qpkey_t key; dns_fixedname_t fn1, fn2; dns_name_t *in = NULL, *out = NULL; + char namebuf[DNS_NAME_FORMATSIZE]; in = dns_fixedname_initname(&fn1); if (testcases[i].len != 0) { @@ -111,6 +112,9 @@ ISC_RUN_TEST_IMPL(qpkey_name) { out = dns_fixedname_initname(&fn2); dns_qpkey_toname(key, len, out); assert_true(dns_name_equal(in, out)); + /* check that 'out' is properly reset by dns_qpkey_toname */ + dns_qpkey_toname(key, len, out); + dns_name_format(out, namebuf, sizeof(namebuf)); } }