]> git.ipfire.org Git - thirdparty/libvirt.git/commit
util: bitmap: clarify virBitmapLastSetBit() behavior for empty bitmaps
authorMarc Hartmayer <mhartmay@linux.vnet.ibm.com>
Wed, 6 Jul 2016 12:02:26 +0000 (14:02 +0200)
committerMartin Kletzander <mkletzan@redhat.com>
Tue, 4 Oct 2016 05:45:45 +0000 (07:45 +0200)
commit19ca7bbf103e7ec41db7c90dd63fb33ca3812614
treea7933000a6a649c63379651eb2fa0d2d3e3a53e4
parent2d02be4cf156149e992ef1712cfed5721d7c88a9
util: bitmap: clarify virBitmapLastSetBit() behavior for empty bitmaps

Before the variable 'bits' was initialized with 0 (commit
3470cd860d517760b13e26d97b6a842ff72687a1), the following bug was
possible.

A function call with an empty bitmap leads to undefined
behavior. Because if 'bitmap->map_len == 0' 'unusedBits' will be <= 0
and 'sz == 1'. So the non global and non static variable 'bits' would
have never been set. Consequently the check 'bits == 0' results in
undefined behavior.

This patch clarifies the current version of the function by handling the
empty bitmap explicitly. Also, for an empty bitmap there is obviously no
bit set so we can just return -1 (indicating no bit set) right away. The
explicit check for 'bits == 0' after the loop is unnecessary because we
only get to this point if no set bit was found.

Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
Reviewed-by: Sascha Silbe <silbe@linux.vnet.ibm.com>
Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
Signed-off-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com>
(cherry picked from commit 7cd01a248b3995909adad29a6edbe76d3d16510f)
src/util/virbitmap.c