Fix QMultiHash::equal_range crashes

QMultiHash::equal_range crashes when called in a const member function.
The Data `d` is a NULL pointer when calling equal_range()
before inserting data into an empty QMultiHash.
Then calling`d->find` crashes.

Fixes: QTBUG-89687
Pick-to: 6.0
Change-Id: I10c3d196cbc72aed8c8c922ef16534bba51037b7
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
Zhang Yu 2020-12-30 10:57:09 +08:00
parent 13f9e2857b
commit 22416ecaaf
2 changed files with 10 additions and 0 deletions

View File

@ -1901,6 +1901,9 @@ public:
QPair<const_iterator, const_iterator> equal_range(const Key &key) const noexcept
{
if (!d)
return qMakePair(end(), end());
auto it = d->find(key);
if (it.isUnused())
return qMakePair(end(), end());

View File

@ -1735,6 +1735,13 @@ void tst_QHash::equal_range()
QVERIFY(p2.first == cm1.cbegin() || p2.second == cm1.cend());
}
{
const QMultiHash<int, int> cm2;
auto p1 = cm2.equal_range(0);
QVERIFY(p1.first == cm2.end());
QVERIFY(p1.second == cm2.end());
}
QMultiHash<int, int> h2;
for (int i = 0; i < 8; ++i)
for (int j = 0; j < 8; ++j)