QDoubleValidator: fix NaN check in validateWithLocale

We can't really compare two NaN's. Should use qIsNaN() for that.

Pick-to: 6.2
Change-Id: Ia514cabe65cfcdeafb39cab91ecdb66f8fae725c
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
bb10
Ivan Solovev 2021-08-31 11:29:00 +02:00
parent 81a9335c65
commit 313de93b1d
2 changed files with 9 additions and 2 deletions

View File

@ -683,8 +683,7 @@ QValidator::State QDoubleValidatorPrivate::validateWithLocale(QString &input, QL
bool ok = false;
double i = locale.toDouble(input, &ok); // returns 0.0 if !ok
if (i == qt_qnan())
return QValidator::Invalid;
Q_ASSERT(!qIsNaN(i)); // Would be caught by validateChars()
if (!ok)
return QValidator::Intermediate;

View File

@ -216,6 +216,14 @@ void tst_QDoubleValidator::validate_data()
QTest::newRow("data_de48") << "de" << 0.0 << 2.0 << 2 << QString("9,9999") << INV << INV;
QTest::newRow("data_de49") << "de" << 100.0 << 200.0 << 4 << QString("9999,9999") << ITM << INV;
// using default QDoubleValidator parameters for initialization
QTest::newRow("inf") << "C" << -HUGE_VAL << HUGE_VAL << 1000 << QString("inf") << INV << INV;
QTest::newRow("+inf") << "C" << -HUGE_VAL << HUGE_VAL << 1000 << QString("+inf") << INV << INV;
QTest::newRow("-inf") << "C" << -HUGE_VAL << HUGE_VAL << 1000 << QString("-inf") << INV << INV;
QTest::newRow("nan") << "C" << -HUGE_VAL << HUGE_VAL << 1000 << QString("nan") << INV << INV;
QTest::newRow("+nan") << "C" << -HUGE_VAL << HUGE_VAL << 1000 << QString("+nan") << INV << INV;
QTest::newRow("-nan") << "C" << -HUGE_VAL << HUGE_VAL << 1000 << QString("-nan") << INV << INV;
QString arabicNum;
arabicNum += QChar(1633); // "18.4" in arabic
arabicNum += QChar(1640);