lib/bloom: Fix bloom hashing on 32-bit architectures

There was an implicit cast from guint64 to gsize (which is 32-bit on
armhf, for example) before the modulus arithmetic which safely narrows
the index.

Fix that by using a guint64 intermediate variable and making the cast
explicit.

Signed-off-by: Philip Withnall <withnall@endlessm.com>

Closes: #1231
Approved by: cgwalters
This commit is contained in:
Philip Withnall 2017-10-01 00:12:25 +01:00 committed by Atomic Bot
parent 4262a4b016
commit 1673601510
1 changed files with 4 additions and 4 deletions

View File

@ -273,11 +273,11 @@ ostree_bloom_maybe_contains (OstreeBloom *bloom,
for (i = 0; i < bloom->k; i++) for (i = 0; i < bloom->k; i++)
{ {
gsize idx; guint64 idx;
idx = bloom->hash_func (element, i); idx = bloom->hash_func (element, i);
if (!ostree_bloom_get_bit (bloom, idx % (bloom->n_bytes * 8))) if (!ostree_bloom_get_bit (bloom, (gsize) (idx % (bloom->n_bytes * 8))))
return FALSE; /* definitely not in the set */ return FALSE; /* definitely not in the set */
} }
@ -337,8 +337,8 @@ ostree_bloom_add_element (OstreeBloom *bloom,
for (i = 0; i < bloom->k; i++) for (i = 0; i < bloom->k; i++)
{ {
gsize idx = bloom->hash_func (element, i); guint64 idx = bloom->hash_func (element, i);
ostree_bloom_set_bit (bloom, idx % (bloom->n_bytes * 8)); ostree_bloom_set_bit (bloom, (gsize) (idx % (bloom->n_bytes * 8)));
} }
} }