static void
hashmap_node_init(hashmap_node_t *node, const uint32_t hashval,
const uint8_t *key, const uint32_t keysize, void *value) {
- REQUIRE(key != NULL && keysize > 0 && keysize <= UINT16_MAX);
+ REQUIRE(key != NULL && keysize <= UINT16_MAX);
*node = (hashmap_node_t){
.value = value,
isc_hashmap_hash(const isc_hashmap_t *hashmap, const void *key,
uint32_t keysize) {
REQUIRE(ISC_HASHMAP_VALID(hashmap));
- REQUIRE(key != NULL && keysize > 0 && keysize <= UINT16_MAX);
uint32_t hashval;
isc_hashmap_find(const isc_hashmap_t *hashmap, const uint32_t *hashvalp,
const void *key, uint32_t keysize, void **valuep) {
REQUIRE(ISC_HASHMAP_VALID(hashmap));
- REQUIRE(key != NULL && keysize > 0 && keysize <= UINT16_MAX);
+ REQUIRE(key != NULL && keysize <= UINT16_MAX);
hashmap_node_t *node;
uint8_t idx = hashmap->hindex;
isc_hashmap_delete(isc_hashmap_t *hashmap, const uint32_t *hashvalp,
const void *key, uint32_t keysize) {
REQUIRE(ISC_HASHMAP_VALID(hashmap));
- REQUIRE(key != NULL && keysize > 0 && keysize <= UINT16_MAX);
+ REQUIRE(key != NULL && keysize <= UINT16_MAX);
hashmap_node_t *node;
isc_result_t result = ISC_R_NOTFOUND;
isc_hashmap_add(isc_hashmap_t *hashmap, const uint32_t *hashvalp,
const void *key, uint32_t keysize, void *value) {
REQUIRE(ISC_HASHMAP_VALID(hashmap));
- REQUIRE(key != NULL && keysize > 0 && keysize <= UINT16_MAX);
+ REQUIRE(key != NULL && keysize <= UINT16_MAX);
isc_result_t result;
uint32_t hashval = (hashvalp != NULL)
return;
}
+ISC_RUN_TEST_IMPL(isc_hashmap_hash_zero_length) {
+ isc_hashmap_t *hashmap = NULL;
+ uint32_t hashval;
+ bool again = false;
+
+again:
+ isc_hashmap_create(mctx, 1, ISC_HASHMAP_CASE_SENSITIVE, &hashmap);
+
+ hashval = isc_hashmap_hash(hashmap, "", 0);
+
+ isc_hashmap_destroy(&hashmap);
+
+ if (hashval == 0 && !again) {
+ /*
+ * We could be extremely unlock and the siphash could hash the
+ * zero length string to 0, so try one more time.
+ */
+ again = true;
+ goto again;
+ }
+
+ assert_int_not_equal(hashval, 0);
+}
+
ISC_RUN_TEST_IMPL(isc_hashmap_case) {
isc_result_t result;
isc_hashmap_t *hashmap = NULL;
}
ISC_TEST_LIST_START
+ISC_TEST_ENTRY(isc_hashmap_hash_zero_length)
ISC_TEST_ENTRY(isc_hashmap_case)
ISC_TEST_ENTRY(isc_hashmap_1_120)
ISC_TEST_ENTRY(isc_hashmap_6_1000)