lib/bloom: Fix bloom hashing on 32-bit architectures
authorPhilip Withnall <withnall@endlessm.com>
Sat, 30 Sep 2017 23:12:25 +0000 (00:12 +0100)
committerAtomic Bot <atomic-devel@projectatomic.io>
Sun, 1 Oct 2017 12:24:46 +0000 (12:24 +0000)
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

src/libostree/ostree-bloom.c

index 6b42d97a78e255d64b62b8728f5f97cb4dbe14a1..8defb1767354ba743ed382f1536ebf48348f930d 100644 (file)
@@ -273,11 +273,11 @@ ostree_bloom_maybe_contains (OstreeBloom   *bloom,
 
   for (i = 0; i < bloom->k; i++)
     {
-      gsize idx;
+      guint64 idx;
 
       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 */
     }
 
@@ -337,8 +337,8 @@ ostree_bloom_add_element (OstreeBloom   *bloom,
 
   for (i = 0; i < bloom->k; i++)
     {
-      gsize idx = bloom->hash_func (element, i);
-      ostree_bloom_set_bit (bloom, idx % (bloom->n_bytes * 8));
+      guint64 idx = bloom->hash_func (element, i);
+      ostree_bloom_set_bit (bloom, (gsize) (idx % (bloom->n_bytes * 8)));
     }
 }