From 2bb6208c57aa036f9ad58fecf7ab08d7bb79072f Mon Sep 17 00:00:00 2001 From: Tony Finch Date: Wed, 9 Nov 2022 17:32:05 +0000 Subject: [PATCH] Avoid unspecified behaviour in name_test C does not make any guarantees about the value of padding in a structure, so bytewise comparison of two semantically equal structures with padding can be spuriously non-equal due to non-equal padding bytes. Compare each member of name.attributes individually to avoid this problem. --- tests/dns/name_test.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tests/dns/name_test.c b/tests/dns/name_test.c index 441c3c3923..d38ab7cea0 100644 --- a/tests/dns/name_test.c +++ b/tests/dns/name_test.c @@ -500,11 +500,20 @@ ISC_RUN_TEST_IMPL(istat) { } } +static bool +name_attr_zero(struct dns_name_attrs attributes) { + return (!(attributes.absolute | attributes.readonly | + attributes.dynamic | attributes.dynoffsets | + attributes.nocompress | attributes.cache | attributes.answer | + attributes.ncache | attributes.chaining | attributes.chase | + attributes.wildcard | attributes.prerequisite | + attributes.update | attributes.hasupdaterec)); +} + /* dns_nane_init */ ISC_RUN_TEST_IMPL(init) { dns_name_t name; unsigned char offsets[1]; - struct dns_name_attrs zeroes = {}; UNUSED(state); @@ -513,16 +522,15 @@ ISC_RUN_TEST_IMPL(init) { assert_null(name.ndata); assert_int_equal(name.length, 0); assert_int_equal(name.labels, 0); - assert_memory_equal(&name.attributes, &zeroes, sizeof(zeroes)); assert_ptr_equal(name.offsets, offsets); assert_null(name.buffer); + assert_true(name_attr_zero(name.attributes)); } /* dns_nane_invalidate */ ISC_RUN_TEST_IMPL(invalidate) { dns_name_t name; unsigned char offsets[1]; - struct dns_name_attrs zeroes = {}; UNUSED(state); @@ -532,9 +540,9 @@ ISC_RUN_TEST_IMPL(invalidate) { assert_null(name.ndata); assert_int_equal(name.length, 0); assert_int_equal(name.labels, 0); - assert_memory_equal(&name.attributes, &zeroes, sizeof(zeroes)); assert_null(name.offsets); assert_null(name.buffer); + assert_true(name_attr_zero(name.attributes)); } /* dns_nane_setbuffer/hasbuffer */