diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2022-10-26 08:50:37 -0700 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-10-28 23:45:37 +0000 |
commit | 1980923bd3fba57828d8566d47afd4de4b486539 (patch) | |
tree | 49da857907a17009104ba82fc51d26b03117d350 | |
parent | bc6e0d1e00c7e5b49f1b06a1747da7be34ff3193 (diff) |
QString::asprintf: fix handling of a present-but-empty precision
%.f should be handled like %.0f. You probably don't want it for strings,
though.
Fixes: QTBUG-107991
Change-Id: I07ec23f3cb174fb197c3fffd1721a941fbcf15e1
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
(cherry picked from commit bdee2c9760109d8e483c3b0e5c99fabc48bf21f5)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/corelib/text/qstring.cpp | 1 | ||||
-rw-r--r-- | tests/auto/corelib/text/qstring/tst_qstring.cpp | 37 |
2 files changed, 38 insertions, 0 deletions
diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index 48a352c3af..157cbdb5fb 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -6872,6 +6872,7 @@ QString QString::vasprintf(const char *cformat, va_list ap) int precision = -1; // -1 means unspecified if (*c == '.') { ++c; + precision = 0; if (qIsDigit(*c)) { precision = parse_field_width(c, formatEnd - c); } else if (*c == '*') { // can't parse this in another function, not portably, at least diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp index 239b3498a9..f9ce102aea 100644 --- a/tests/auto/corelib/text/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp @@ -1393,6 +1393,43 @@ void tst_QString::asprintf() double d = -514.25683; QCOMPARE(QString::asprintf("%f", d), QLatin1String("-514.256830")); + QCOMPARE(QString::asprintf("%.f", d), QLatin1String("-514")); + QCOMPARE(QString::asprintf("%.0f", d), QLatin1String("-514")); + QCOMPARE(QString::asprintf("%1f", d), QLatin1String("-514.256830")); + QCOMPARE(QString::asprintf("%1.f", d), QLatin1String("-514")); + QCOMPARE(QString::asprintf("%1.0f", d), QLatin1String("-514")); + QCOMPARE(QString::asprintf("%1.6f", d), QLatin1String("-514.256830")); + QCOMPARE(QString::asprintf("%1.10f", d), QLatin1String("-514.2568300000")); + QCOMPARE(QString::asprintf("%-1f", d), QLatin1String("-514.256830")); + QCOMPARE(QString::asprintf("%-1.f", d), QLatin1String("-514")); + QCOMPARE(QString::asprintf("%-1.0f", d), QLatin1String("-514")); + QCOMPARE(QString::asprintf("%-1.6f", d), QLatin1String("-514.256830")); + QCOMPARE(QString::asprintf("%-1.10f", d), QLatin1String("-514.2568300000")); + QCOMPARE(QString::asprintf("%10f", d), QLatin1String("-514.256830")); + QCOMPARE(QString::asprintf("%10.f", d), QLatin1String(" -514")); + QCOMPARE(QString::asprintf("%10.0f", d), QLatin1String(" -514")); + QCOMPARE(QString::asprintf("%-10f", d), QLatin1String("-514.256830")); + QCOMPARE(QString::asprintf("%-10.f", d), QLatin1String("-514 ")); + QCOMPARE(QString::asprintf("%-10.0f", d), QLatin1String("-514 ")); + QCOMPARE(QString::asprintf("%010f", d), QLatin1String("-514.256830")); + QCOMPARE(QString::asprintf("%010.f", d), QLatin1String("-000000514")); + QCOMPARE(QString::asprintf("%010.0f", d), QLatin1String("-000000514")); + QCOMPARE(QString::asprintf("%15f", d), QLatin1String(" -514.256830")); + QCOMPARE(QString::asprintf("%15.6f", d), QLatin1String(" -514.256830")); + QCOMPARE(QString::asprintf("%15.10f", d), QLatin1String("-514.2568300000")); + QCOMPARE(QString::asprintf("%-15f", d), QLatin1String("-514.256830 ")); + QCOMPARE(QString::asprintf("%-15.6f", d), QLatin1String("-514.256830 ")); + QCOMPARE(QString::asprintf("%-15.10f", d), QLatin1String("-514.2568300000")); + QCOMPARE(QString::asprintf("%015f", d), QLatin1String("-0000514.256830")); + QCOMPARE(QString::asprintf("%015.6f", d), QLatin1String("-0000514.256830")); + QCOMPARE(QString::asprintf("%015.10f", d), QLatin1String("-514.2568300000")); +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Wformat") +QT_WARNING_DISABLE_CLANG("-Wformat") // Flag '0' ignored when flag '-' is present + QCOMPARE(QString::asprintf("%-015f", d), QLatin1String("-514.256830 ")); + QCOMPARE(QString::asprintf("%-015.6f", d), QLatin1String("-514.256830 ")); + QCOMPARE(QString::asprintf("%-015.10f", d), QLatin1String("-514.2568300000")); +QT_WARNING_POP { /* This code crashed. I don't know how to reduce it further. In other words, |