uint8_t *next_hash = NULL;
knot_nsec3_next_hashed(&nsec3->rrs, 0, &next_hash, &next_size);
- if ((owner_hash.size == next_size) && (name_hash.size == next_size)) {
+ if ((next_size > 0) && (owner_hash.size == next_size) && (name_hash.size == next_size)) {
/* All hash lengths must be same. */
const uint8_t *ownrd = owner_hash.data;
const uint8_t *nextd = next_hash;
if (g->hashes[i] == khash_top) {
it = g->items[i];
if (likely(it && it->key_len == key_len
- && memcmp(it->data, key, key_len) == 0))
+ && (key_len == 0 || memcmp(it->data, key, key_len) == 0)))
goto found; // to reduce huge nesting depth
}
}
}
it->key_len = key_len;
it->val_len = val_len;
- memcpy(it->data, key, key_len);
+ if (key_len > 0) {
+ memcpy(it->data, key, key_len);
+ }
memset(item_val(it), 0, val_len); // clear the value
found: // key and hash OK on g->items[i]; now update stamps
assert(i < LRU_ASSOC);