diff options
author | Dennis Oberst <dennis.oberst@qt.io> | 2023-08-16 18:25:41 +0200 |
---|---|---|
committer | Dennis Oberst <dennis.oberst@qt.io> | 2023-09-07 15:05:05 +0200 |
commit | 3db9ef358da817480d6f4c055d85a6aa7be17991 (patch) | |
tree | 3b93d51931486312339f47c7b059cf513244702d /tests/auto/corelib/tools | |
parent | 02e2a3f123f08c473f8e79e5e245fd30c06448a6 (diff) |
QArrayDataPointer: remove Q_CHECK_PTR in assign(it, it) again
This commit reverts 2d77051f9dfd11ae292ad4bac2f28c5f7a0e7f83.
When requesting an allocation of size 0, we will actually get
a nullptr.
qarraydata.cpp:
~~~
if (capacity == 0) {
*dptr = nullptr;
return nullptr;
}
This will let the Q_CHECK_PTR trigger falsely. Such an occurrence was
initially detected during the cmake_automoc_parser build-step.
Found-by: Marc Mutz <marc.mutz@qt.io>
Task-number: QTBUG-106196
Pick-to: 6.6
Change-Id: Icb68c5dd518c9623119a61d5c4fdcff43dc4ac5d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/tools')
-rw-r--r-- | tests/auto/corelib/tools/qlist/tst_qlist.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/auto/corelib/tools/qlist/tst_qlist.cpp b/tests/auto/corelib/tools/qlist/tst_qlist.cpp index 06ae1c4fb8..743028351c 100644 --- a/tests/auto/corelib/tools/qlist/tst_qlist.cpp +++ b/tests/auto/corelib/tools/qlist/tst_qlist.cpp @@ -231,6 +231,7 @@ private slots: void appendCustom() const { append<Custom>(); } void appendRvalue() const; void appendList() const; + void assignEmpty() const; void assignInt() const { assign<int>(); } void assignMovable() const { assign<Movable>(); } void assignCustom() const { assign<Custom>(); } @@ -759,6 +760,25 @@ void tst_QList::append() const } } +void tst_QList::assignEmpty() const +{ + // Test that the realloc branch in assign(it, it) doesn't crash. + using T = int; + QList<T> list; + QList<T> ref1 = list; + QVERIFY(list.d.needsDetach()); + list.assign(list.begin(), list.begin()); + +#if !defined Q_OS_QNX // QNX has problems with the empty istream_iterator + auto empty = std::istream_iterator<T>{}; + list.squeeze(); + QCOMPARE_EQ(list.capacity(), 0); + ref1 = list; + QVERIFY(list.d.needsDetach()); + list.assign(empty, empty); +#endif +} + template <typename T> void tst_QList::assign() const { |