From 3bc8ebc12f7d7e5578d40b1c00a4fe77d044f871 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 10 Jan 2025 15:13:50 -0300 Subject: [PATCH] QString: put quotes around the test string in arg() qWarning So it's less ambiguous in case there's a comma in either the pattern string or the replacement one. It will still be ambiguous for strings with quotes themselves, but escaping requires content not present in the bootstrap library. Drive-by test that unsigned and floating point also complain. Pick-to: 6.9 Change-Id: Ia8ca184a7d54b240d653fffd631dbcb7f9e1c97d Reviewed-by: Ivan Solovev --- src/corelib/text/qstring.cpp | 4 ++-- tests/auto/corelib/text/qstring/tst_qstring.cpp | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index 14accbb7041..935b7363cf4 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -8765,7 +8765,7 @@ QString QString::arg_impl(QAnyStringView a, int fieldWidth, QChar fillChar) cons ArgEscapeData d = findArgEscapes(*this); if (Q_UNLIKELY(d.occurrences == 0)) { - qWarning("QString::arg: Argument missing: %ls, %ls", qUtf16Printable(*this), + qWarning("QString::arg: Argument missing: \"%ls\", \"%ls\"", qUtf16Printable(*this), qUtf16Printable(a.toString())); return *this; } @@ -8905,7 +8905,7 @@ QString QString::arg_impl(double a, int fieldWidth, char format, int precision, ArgEscapeData d = findArgEscapes(*this); if (d.occurrences == 0) { - qWarning("QString::arg: Argument missing: %s, %g", toLocal8Bit().data(), a); + qWarning("QString::arg: Argument missing: \"%ls\", %g", qUtf16Printable(*this), a); return *this; } diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp index cefe9648b04..acb88f01776 100644 --- a/tests/auto/corelib/text/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp @@ -6671,7 +6671,7 @@ void tst_QString::arg() QTest::ignoreMessage(QtWarningMsg, nonAsciiArgWarning); QCOMPARE( QString("%2²%1").arg("a").arg("b"), QString("ba") ); #else - QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: %¹, foo"); + QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \"%¹\", \"foo\""); QCOMPARE(u"%¹"_s.arg(foo), u"%¹"); QCOMPARE(u"%¹%1"_s.arg(foo), u"%¹foo"); QCOMPARE(u"%1²"_s.arg(u"E=mc"_s), u"E=mc²"); @@ -6725,11 +6725,15 @@ void tst_QString::arg() #endif QCOMPARE(s4.arg(u8'a'), QLatin1String("[a]")); - QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: , foo"); + QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \"\", \"foo\""); QCOMPARE(QString().arg(foo), QString()); QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \"\", 0"); QCOMPARE( QString().arg(0), QString() ); QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \"\", 0"); + QCOMPARE( QString().arg(0U), QString() ); + QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \"\", 0"); + QCOMPARE( QString().arg(0.0), QString() ); + QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \"\", 0"); QCOMPARE(QString(u""_s).arg(0), u""_s); QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \" \", 0"); QCOMPARE(QString(u" "_s).arg(0), " "_L1);