mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 06:38:10 +00:00
AK: Don't crash in HashTable::clear_with_capacity on an empty table
When calling clear_with_capacity on an empty HashTable/HashMap, a null deref would occur when trying to memset() m_buckets. Checking that it has capacity before clearing fixes the issue.
This commit is contained in:
parent
8f0fdef856
commit
a1300d3797
2 changed files with 11 additions and 0 deletions
|
@ -291,6 +291,8 @@ public:
|
||||||
}
|
}
|
||||||
void clear_with_capacity()
|
void clear_with_capacity()
|
||||||
{
|
{
|
||||||
|
if (m_capacity == 0)
|
||||||
|
return;
|
||||||
if constexpr (!Detail::IsTriviallyDestructible<T>) {
|
if constexpr (!Detail::IsTriviallyDestructible<T>) {
|
||||||
for (auto* bucket : *this)
|
for (auto* bucket : *this)
|
||||||
bucket->~T();
|
bucket->~T();
|
||||||
|
|
|
@ -309,3 +309,12 @@ TEST_CASE(reinsertion)
|
||||||
map.remove("__sak");
|
map.remove("__sak");
|
||||||
map.set("__sak");
|
map.set("__sak");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE(clear_with_capacity_when_empty)
|
||||||
|
{
|
||||||
|
HashTable<int> map;
|
||||||
|
map.clear_with_capacity();
|
||||||
|
map.set(0);
|
||||||
|
map.set(1);
|
||||||
|
VERIFY(map.size() == 2);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue