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 && 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)); } }