Merge "Astobj2: Correctly treat hash_fn returning INT_MIN"

This commit is contained in:
Joshua Colp
2015-05-26 16:07:21 -05:00
committed by Gerrit Code Review

View File

@@ -215,8 +215,7 @@ static struct hash_bucket_node *hash_ao2_new_node(struct ao2_container_hash *sel
return NULL; return NULL;
} }
i = abs(self->hash_fn(obj_new, OBJ_SEARCH_OBJECT)); i = abs(self->hash_fn(obj_new, OBJ_SEARCH_OBJECT) % self->n_buckets);
i %= self->n_buckets;
__ao2_ref(obj_new, +1, tag ?: "Container node creation", file, line, func); __ao2_ref(obj_new, +1, tag ?: "Container node creation", file, line, func);
node->common.obj = obj_new; node->common.obj = obj_new;
@@ -362,8 +361,8 @@ static struct hash_bucket_node *hash_ao2_find_first(struct ao2_container_hash *s
case OBJ_SEARCH_OBJECT: case OBJ_SEARCH_OBJECT:
case OBJ_SEARCH_KEY: case OBJ_SEARCH_KEY:
/* we know hash can handle this case */ /* we know hash can handle this case */
bucket_cur = abs(self->hash_fn(arg, flags & OBJ_SEARCH_MASK)); bucket_cur = abs(self->hash_fn(arg, flags & OBJ_SEARCH_MASK)
bucket_cur %= self->n_buckets; % self->n_buckets);
state->sort_fn = self->common.sort_fn; state->sort_fn = self->common.sort_fn;
break; break;
case OBJ_SEARCH_PARTIAL_KEY: case OBJ_SEARCH_PARTIAL_KEY:
@@ -960,8 +959,8 @@ static int hash_ao2_integrity(struct ao2_container_hash *self)
++count_obj; ++count_obj;
/* Check container hash key for expected bucket. */ /* Check container hash key for expected bucket. */
bucket_exp = abs(self->hash_fn(node->common.obj, OBJ_SEARCH_OBJECT)); bucket_exp = abs(self->hash_fn(node->common.obj, OBJ_SEARCH_OBJECT)
bucket_exp %= self->n_buckets; % self->n_buckets);
if (bucket != bucket_exp) { if (bucket != bucket_exp) {
ast_log(LOG_ERROR, "Bucket %d node hashes to bucket %d!\n", ast_log(LOG_ERROR, "Bucket %d node hashes to bucket %d!\n",
bucket, bucket_exp); bucket, bucket_exp);