Remove offsets from the dns_name and dns_fixedname structures

The offsets were meant to speed-up the repeated dns_name operations, but
it was experimentally proven that there's actually no real-world
benefit.  Remove the offsets and labels fields from the dns_name and the
static offsets fields to save 128 bytes from the fixedname in favor of
calculating labels and offsets only when needed.
This commit is contained in:
Ondřej Surý
2025-02-21 12:09:28 +01:00
parent 869168545a
commit 08e966df82
67 changed files with 348 additions and 652 deletions

View File

@@ -41,8 +41,6 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
dns_fixedname_t old_fixed;
dns_name_t *new_name = dns_fixedname_initname(&new_fixed);
dns_name_t *old_name = dns_fixedname_initname(&old_fixed);
uint8_t *new_offsets;
uint8_t *old_offsets;
dns_decompress_t dctx = DNS_DECOMPRESS_PERMITTED;
isc_buffer_t new_buf;
isc_buffer_t old_buf;
@@ -81,12 +79,6 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
REQUIRE(new_result == old_result);
REQUIRE(dns_name_equal(new_name, old_name));
REQUIRE(new_name->labels == old_name->labels);
new_offsets = new_name->offsets;
old_offsets = old_name->offsets;
REQUIRE(new_offsets != NULL && old_offsets != NULL);
REQUIRE(memcmp(new_offsets, old_offsets, old_name->labels) == 0);
REQUIRE(new_fixed.buffer.current == old_fixed.buffer.current);
REQUIRE(new_fixed.buffer.active == old_fixed.buffer.active);

View File

@@ -34,17 +34,12 @@ typedef enum { fw_start = 0, fw_ordinary, fw_newcurrent } fw_state;
#define VALID_NAME(n) ISC_MAGIC_VALID(n, DNS_NAME_MAGIC)
#define INIT_OFFSETS(name, var, default_offsets) \
if ((name)->offsets != NULL) \
var = (name)->offsets; \
else \
var = (default_offsets);
#define INIT_OFFSETS(name, var, default_offsets) (var) = (default_offsets)
#define MAKE_EMPTY(name) \
do { \
name->ndata = NULL; \
name->length = 0; \
name->labels = 0; \
name->attributes.absolute = false; \
} while (0)
@@ -197,7 +192,6 @@ old_name_fromwire(dns_name_t *name, isc_buffer_t *source, dns_decompress_t dctx,
}
name->ndata = (unsigned char *)target->base + target->used;
name->labels = labels;
name->length = nused;
name->attributes.absolute = true;