Fix invalid read, detected by valgrind

Commit 3fe1eed0 changed the QVERIFY in line 1354 to QCOMPARE. This was
done to work around a (not yet understood) compiler issue. That however
was wrong, as char pointers in QCOMPARE are assumed to point to
'\0'-terminated strings and will get dereferenced.

In this case the intent was to compare the actual pointer values, as the
pointers point past the end of the array and should not be dereferenced.

Explicitly casting to (void *) and using QCOMPARE will not only keep the
intent, it will hopefully also provide meaningful output on failures. As
such the fix was applied throughout the test.

Change-Id: Ib0968df492ccc11d7c391bb69037cd7241e55493
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
bb10
João Abecasis 2012-03-07 14:09:45 +01:00 committed by Qt by Nokia
parent 801832b8a3
commit c67efb6506
1 changed files with 10 additions and 10 deletions

View File

@ -314,11 +314,11 @@ void tst_QArrayData::simpleVector()
QVERIFY(!v1.isSharedWith(v5));
QVERIFY(!v1.isSharedWith(v6));
QVERIFY(v1.constBegin() == v1.constEnd());
QVERIFY(v4.constBegin() == v4.constEnd());
QVERIFY(v6.constBegin() + v6.size() == v6.constEnd());
QVERIFY(v7.constBegin() + v7.size() == v7.constEnd());
QVERIFY(v8.constBegin() + v8.size() == v8.constEnd());
QCOMPARE((void *)v1.constBegin(), (void *)v1.constEnd());
QCOMPARE((void *)v4.constBegin(), (void *)v4.constEnd());
QCOMPARE((void *)(v6.constBegin() + v6.size()), (void *)v6.constEnd());
QCOMPARE((void *)(v7.constBegin() + v7.size()), (void *)v7.constEnd());
QCOMPARE((void *)(v8.constBegin() + v8.size()), (void *)v8.constEnd());
QVERIFY(v1 == v2);
QVERIFY(v1 == v3);
@ -1216,7 +1216,7 @@ void tst_QArrayData::fromRawData()
QCOMPARE(raw.size(), size_t(11));
QCOMPARE(raw.constBegin(), array);
QCOMPARE(raw.constEnd(), array + sizeof(array)/sizeof(array[0]));
QCOMPARE((void *)raw.constEnd(), (void *)(array + sizeof(array)/sizeof(array[0])));
QVERIFY(!raw.isShared());
QVERIFY(SimpleVector<int>(raw).isSharedWith(raw));
@ -1234,7 +1234,7 @@ void tst_QArrayData::fromRawData()
QCOMPARE(raw.size(), size_t(11));
QCOMPARE(raw.constBegin(), array);
QCOMPARE(raw.constEnd(), array + sizeof(array)/sizeof(array[0]));
QCOMPARE((void *)raw.constEnd(), (void *)(array + sizeof(array)/sizeof(array[0])));
SimpleVector<int> copy(raw);
QVERIFY(!copy.isSharedWith(raw));
@ -1247,7 +1247,7 @@ void tst_QArrayData::fromRawData()
QCOMPARE(raw.size(), size_t(11));
QCOMPARE(raw.constBegin(), array);
QCOMPARE(raw.constEnd(), array + sizeof(array)/sizeof(array[0]));
QCOMPARE((void *)raw.constEnd(), (void *)(array + sizeof(array)/sizeof(array[0])));
// Detach
QCOMPARE(raw.back(), 11);
@ -1286,7 +1286,7 @@ void tst_QArrayData::literals()
#endif
QVERIFY(v.isSharable());
QCOMPARE(v.constBegin() + v.size(), v.constEnd());
QCOMPARE((void *)(v.constBegin() + v.size()), (void *)v.constEnd());
for (int i = 0; i < 10; ++i)
QCOMPARE(const_(v)[i], char('A' + i));
@ -1335,7 +1335,7 @@ void tst_QArrayData::variadicLiterals()
QVERIFY(v.isStatic());
QVERIFY(v.isSharable());
QVERIFY(v.constBegin() + v.size() == v.constEnd());
QCOMPARE((void *)(v.constBegin() + v.size()), (void *)v.constEnd());
for (int i = 0; i < 7; ++i)
QCOMPARE(const_(v)[i], i);