From ae44b283a92f3deae16cf0e5fd9ff8983e6a3ed1 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 5 Jun 2024 16:43:46 -0700 Subject: [PATCH] tst_QStringConverter: compare pointer distances, not pointers Strictly speaking, we did want to compare pointers, but char* are special with QCOMPARE in that the pointed-to strings are compared, not the pointers. So this wasn't doing what we wanted it to do. We could static_cast to void* to do it, but subtracting one from the other also gets us what we want, with simpler code. The drawback is that if appendToBuffer() ever returns nullptr, we'll print a huge number as the offset. Found by Valgrind: ==3769588== Conditional jump or move depends on uninitialised value(s) ==3769588== at 0x483FEDC: strcmp (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==3769588== by 0x4C41EB6: qstrcmp(char const*, char const*) (in lib/libQt6Core.so.6.9.0) ==3769588== by 0x48975D8: QTest::compare_string_helper(char const*, char const*, char const*, char const*, char const*, int) (in lib/libQt6Test.so.6.9.0) ==3769588== by 0x12B12A: QTest::qCompare(char*, char*, char const*, char const*, char const*, int) (in tests/auto/corelib/text/qstringconverter/tst_qstringconverter) ==3769588== by 0x10EE94: tst_QStringConverter::invalidConverter() (in tests/auto/corelib/text/qstringconverter/tst_qstringconverter) Amends c46ee7df57c30c94107df8506d30d8872ffa3baa. Pick-to: 6.7 6.5 6.2 Fixes: QTBUG-126107 Change-Id: I44265a5eb67e47a59fc8fffd17d64051657af529 Reviewed-by: Marc Mutz Reviewed-by: Fabian Kosmale (cherry picked from commit 9d5611dc97979dab1932b07f8cfab367c3872d24) Reviewed-by: Qt Cherry-pick Bot --- .../corelib/text/qstringconverter/tst_qstringconverter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp index ed3f91ac945..342c343a423 100644 --- a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp +++ b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp @@ -257,7 +257,7 @@ void tst_QStringConverter::invalidConverter() QVERIFY(!encoder.hasError()); char buffer[100]; char *position = encoder.appendToBuffer(buffer, u"Even more"); - QCOMPARE(position, buffer); + QCOMPARE(position - buffer, 0); QVERIFY(encoder.hasError()); } @@ -283,7 +283,7 @@ void tst_QStringConverter::invalidConverter() QVERIFY(!decoder.hasError()); char16_t buffer[100]; char16_t *position = decoder.appendToBuffer(buffer, "Even more"); - QCOMPARE(position, buffer); + QCOMPARE(position - buffer, 0); QVERIFY(decoder.hasError()); } }