mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +00:00
util: fix off-by-one when expanding a bitmap
To make sure bit 'b' fits into the bitmap, we need to allocate b+1 bits, since we number from 0. Adjust the bitmap test to set a bit at a multiple of 16. That way the test fails without this fix, because the VIR_REALLOC call clears the newly added memory even if the original pointer has not changed.
This commit is contained in:
parent
5d82a2085f
commit
4a41cf18b1
@ -187,7 +187,7 @@ int virBitmapSetBit(virBitmapPtr bitmap, size_t b)
|
||||
*/
|
||||
static int virBitmapExpand(virBitmapPtr map, size_t b)
|
||||
{
|
||||
size_t new_len = VIR_DIV_UP(b, VIR_BITMAP_BITS_PER_UNIT);
|
||||
size_t new_len = VIR_DIV_UP(b + 1, VIR_BITMAP_BITS_PER_UNIT);
|
||||
|
||||
/* resize the memory if necessary */
|
||||
if (map->map_len < new_len) {
|
||||
|
@ -639,15 +639,15 @@ test12(const void *opaque ATTRIBUTE_UNUSED)
|
||||
|
||||
TEST_MAP(0, "");
|
||||
|
||||
if (virBitmapSetBitExpand(map, 100) < 0)
|
||||
if (virBitmapSetBitExpand(map, 128) < 0)
|
||||
goto cleanup;
|
||||
|
||||
TEST_MAP(101, "100");
|
||||
TEST_MAP(129, "128");
|
||||
|
||||
if (virBitmapClearBitExpand(map, 150) < 0)
|
||||
goto cleanup;
|
||||
|
||||
TEST_MAP(151, "100");
|
||||
TEST_MAP(151, "128");
|
||||
|
||||
virBitmapFree(map);
|
||||
if (virBitmapParseUnlimited("34,1023", &map) < 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user