From 55f0835fff8bf8be6a58813b6c9faec97ec5597c Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 18 Oct 2019 14:46:59 +0200 Subject: Fix out of bounds accesses in Bitset --- zix/bitset.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'zix/bitset.c') diff --git a/zix/bitset.c b/zix/bitset.c index 6a4d245..e5f8348 100644 --- a/zix/bitset.c +++ b/zix/bitset.c @@ -77,8 +77,10 @@ zix_bitset_count_up_to(const ZixBitset* b, const ZixBitsetTally* t, size_t i) count += t[e]; } - const ZixBitset mask = ~(~(ZixBitset)0 << extra); - count += (size_t)__builtin_popcountl(b[full_elems] & mask); + if (extra) { + const ZixBitset mask = ~(~(ZixBitset)0 << extra); + count += (size_t)__builtin_popcountl(b[full_elems] & mask); + } return count; } @@ -99,8 +101,10 @@ zix_bitset_count_up_to_if(const ZixBitset* b, const ZixBitsetTally* t, size_t i) count += t[e]; } - const ZixBitset mask = ~(~(ZixBitset)0 << extra); - count += __builtin_popcountl(b[full_elems] & mask); + if (extra) { + const ZixBitset mask = ~(~(ZixBitset)0 << extra); + count += __builtin_popcountl(b[full_elems] & mask); + } return count; } -- cgit v1.2.1