[map] Fix bad memory access if hb_map.fini() was called twice.
This commit is contained in:
parent
8a69e00639
commit
ff4e8c7eac
|
@ -131,11 +131,13 @@ struct hb_hashmap_t
|
||||||
}
|
}
|
||||||
void fini_shallow ()
|
void fini_shallow ()
|
||||||
{
|
{
|
||||||
|
if (unlikely (!items)) {
|
||||||
unsigned size = mask + 1;
|
unsigned size = mask + 1;
|
||||||
for (unsigned i = 0; i < size; i++)
|
for (unsigned i = 0; i < size; i++)
|
||||||
items[i].~item_t ();
|
items[i].~item_t ();
|
||||||
hb_free (items);
|
hb_free (items);
|
||||||
items = nullptr;
|
items = nullptr;
|
||||||
|
}
|
||||||
population = occupancy = 0;
|
population = occupancy = 0;
|
||||||
}
|
}
|
||||||
void fini ()
|
void fini ()
|
||||||
|
|
|
@ -78,6 +78,14 @@ main (int argc, char **argv)
|
||||||
assert (v.get_population () == 2);
|
assert (v.get_population () == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test call fini() twice. */
|
||||||
|
{
|
||||||
|
hb_map_t s;
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
s.set(i, i+1);
|
||||||
|
s.fini();
|
||||||
|
}
|
||||||
|
|
||||||
/* Test initializing from iterator. */
|
/* Test initializing from iterator. */
|
||||||
{
|
{
|
||||||
hb_map_t s;
|
hb_map_t s;
|
||||||
|
|
Loading…
Reference in New Issue