diff options
author | Bradley T. Hughes <bradley.hughes@nokia.com> | 2011-10-03 15:21:02 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-10-04 11:21:25 +0200 |
commit | 992a37234c5ec7494fc2f24217d36400f6c1630a (patch) | |
tree | e3bf0adbcb0dfa81ef950de7012d7e078d434bf1 /tests/auto/corelib/tools/qmap | |
parent | 22948130e878903bd9b98b8c031bce7dc07d7a95 (diff) |
Don't crash by modifying read-only shared_null
Functions that modify the d-pointer must detach or otherwise take
measures to not modify the const, read-only shared_null.
The setSharable(bool) function takes care to detach when setting
sharable to false, but should avoid setting the sharable data member
unless d is not the shared null.
Similarly, QMap<Key, T>::setInsertInOrder() needs to detach if it is
shared with the shared_null (the logic has been updated to be the same
as setSharable()).
Change-Id: Ida5cb9818b86695f1b9f0264418b955c56424898
Reviewed-on: http://codereview.qt-project.org/5929
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
Diffstat (limited to 'tests/auto/corelib/tools/qmap')
-rw-r--r-- | tests/auto/corelib/tools/qmap/tst_qmap.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tests/auto/corelib/tools/qmap/tst_qmap.cpp b/tests/auto/corelib/tools/qmap/tst_qmap.cpp index 141e693b16..2b4cbe9b66 100644 --- a/tests/auto/corelib/tools/qmap/tst_qmap.cpp +++ b/tests/auto/corelib/tools/qmap/tst_qmap.cpp @@ -80,6 +80,8 @@ private slots: void iterators(); void keys_values_uniqueKeys(); void qmultimap_specific(); + + void const_shared_null(); }; tst_QMap::tst_QMap() @@ -871,5 +873,20 @@ void tst_QMap::qmultimap_specific() } } +void tst_QMap::const_shared_null() +{ + QMap<int, QString> map1; + map1.setSharable(false); + QVERIFY(map1.isDetached()); + + QMap<int, QString> map2; + map2.setSharable(true); + QVERIFY(!map2.isDetached()); + + QMap<int, QString> map3; + map3.setInsertInOrder(true); + map3.setInsertInOrder(false); +} + QTEST_APPLESS_MAIN(tst_QMap) #include "tst_qmap.moc" |