When calculating the new hashtable bitsize, there was an off-by-one
error that would allow the new bitsize to be larger than maximum allowed
causing assertion failure in the rehash() function.
(cherry picked from commit
78543ad5a7731e5f3a309c73e90a552df1a44af1)
static uint32_t
rehash_bits(dns_rbt_t *rbt, size_t newcount) {
- uint32_t oldbits = rbt->hashbits;
- uint32_t newbits = oldbits;
+ uint32_t newbits = rbt->hashbits;
- while (newcount >= HASHSIZE(newbits) && newbits <= rbt->maxhashbits) {
+ while (newcount >= HASHSIZE(newbits) && newbits < rbt->maxhashbits) {
newbits += 1;
}
static void
maybe_rehash(dns_rbt_t *rbt, size_t newcount) {
uint32_t newbits = rehash_bits(rbt, newcount);
- if (rbt->hashbits < newbits && newbits <= RBT_HASH_MAX_BITS) {
+ if (rbt->hashbits < newbits && newbits <= rbt->maxhashbits) {
rehash(rbt, newbits);
}
}