[map] Protect more against pointer deref
This commit is contained in:
parent
5bffa9e375
commit
31c1a83899
|
@ -63,6 +63,7 @@ struct hb_hashmap_t
|
||||||
bool operator == (const item_t &o) { return *this == o.key; }
|
bool operator == (const item_t &o) { return *this == o.key; }
|
||||||
bool is_unused () const { return key == kINVALID; }
|
bool is_unused () const { return key == kINVALID; }
|
||||||
bool is_tombstone () const { return key != kINVALID && value == vINVALID; }
|
bool is_tombstone () const { return key != kINVALID && value == vINVALID; }
|
||||||
|
bool is_real () const { return key != kINVALID && value != vINVALID; }
|
||||||
};
|
};
|
||||||
|
|
||||||
hb_object_header_t header;
|
hb_object_header_t header;
|
||||||
|
@ -136,7 +137,7 @@ struct hb_hashmap_t
|
||||||
/* Insert back old items. */
|
/* Insert back old items. */
|
||||||
if (old_items)
|
if (old_items)
|
||||||
for (unsigned int i = 0; i < old_size; i++)
|
for (unsigned int i = 0; i < old_size; i++)
|
||||||
if (old_items[i].key != kINVALID && old_items[i].value != vINVALID)
|
if (old_items[i].is_real ())
|
||||||
set (old_items[i].key, old_items[i].value);
|
set (old_items[i].key, old_items[i].value);
|
||||||
|
|
||||||
free (old_items);
|
free (old_items);
|
||||||
|
@ -173,7 +174,7 @@ struct hb_hashmap_t
|
||||||
{
|
{
|
||||||
if (unlikely (!items)) return vINVALID;
|
if (unlikely (!items)) return vINVALID;
|
||||||
unsigned int i = bucket_for (key);
|
unsigned int i = bucket_for (key);
|
||||||
return !items[i].is_unused () && items[i] == key ? items[i].value : vINVALID;
|
return items[i].is_real () && items[i] == key ? items[i].value : vINVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
void del (K key) { set (key, vINVALID); }
|
void del (K key) { set (key, vINVALID); }
|
||||||
|
|
Loading…
Reference in New Issue