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 <ivan.solovev@qt.io>
This commit is contained in:
Thiago Macieira 2025-01-10 15:13:50 -03:00
parent ff484b3111
commit 3bc8ebc12f
2 changed files with 8 additions and 4 deletions

View File

@ -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;
}

View File

@ -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);