QVariant: fix comparisons between strings and integer 0
250ca8d5f8bb3771695ae8eccb8d9b469003d840 changed the qConvertToNumber to have a std::optional return instead of a boolean out-argument. In doing so a code path that was supposed to report a failure (string could not be converted to an integer) accidentally starting reporting success (and converting the string to 0). The problem is that the `ok` check from QString::toLongLong was accidentally dropped in the refactoring; previously the function set `ok` to false and returned 0, now the function just returns 0. Instead, amend that return to return nullopt (because the conversion has failed). Change-Id: Iaedef5463f3ec500a97bd4c9bbddf977f66df61a Fixes: QTBUG-111867 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Marc Mutz <marc.mutz@qt.io> (cherry picked from commit a25644aecf056b9b021189de5384519b6f06c1e6) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
f4b1a9b8bd
commit
7d86115a17
@ -125,7 +125,7 @@ static std::optional<qlonglong> qConvertToNumber(const QVariant::Private *d, boo
|
||||
if (s == "true"_L1 || s == "1"_L1)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
return std::nullopt;
|
||||
}
|
||||
case QMetaType::QChar:
|
||||
return d->get<QChar>().unicode();
|
||||
|
@ -1568,6 +1568,10 @@ void tst_QVariant::operator_eq_eq_data()
|
||||
QVariant mIntString(QByteArray("-42"));
|
||||
QVariant mIntQString(QString("-42"));
|
||||
|
||||
QVariant mIntZero(0);
|
||||
QVariant mIntStringZero(QByteArray("0"));
|
||||
QVariant mIntQStringZero(QString("0"));
|
||||
|
||||
QVariant mUInt(42u);
|
||||
QVariant mUIntString(QByteArray("42"));
|
||||
QVariant mUIntQString(QString("42"));
|
||||
@ -1608,6 +1612,9 @@ void tst_QVariant::operator_eq_eq_data()
|
||||
QVariant mBoolString(QByteArray("false"));
|
||||
QVariant mBoolQString(QString("false"));
|
||||
|
||||
QVariant mTextString(QByteArray("foobar"));
|
||||
QVariant mTextQString(QString("foobar"));
|
||||
|
||||
QTest::newRow( "double_int" ) << QVariant(42.0) << QVariant(42) << true;
|
||||
QTest::newRow( "float_int" ) << QVariant(42.f) << QVariant(42) << true;
|
||||
QTest::newRow( "mInt_mIntString" ) << mInt << mIntString << false;
|
||||
@ -1615,6 +1622,21 @@ void tst_QVariant::operator_eq_eq_data()
|
||||
QTest::newRow( "mInt_mIntQString" ) << mInt << mIntQString << true;
|
||||
QTest::newRow( "mIntQString_mInt" ) << mIntQString << mInt << true;
|
||||
|
||||
QTest::newRow( "mIntZero_mIntStringZero" ) << mIntZero << mIntStringZero << false;
|
||||
QTest::newRow( "mIntStringZero_mIntZero" ) << mIntStringZero << mIntZero << false;
|
||||
QTest::newRow( "mIntZero_mIntQStringZero" ) << mIntZero << mIntQStringZero << true;
|
||||
QTest::newRow( "mIntQStringZero_mIntZero" ) << mIntQStringZero << mIntZero << true;
|
||||
|
||||
QTest::newRow( "mInt_mTextString" ) << mInt << mTextString << false;
|
||||
QTest::newRow( "mTextString_mInt" ) << mTextString << mInt << false;
|
||||
QTest::newRow( "mInt_mTextQString" ) << mInt << mTextQString << false;
|
||||
QTest::newRow( "mTextQString_mInt" ) << mTextQString << mInt << false;
|
||||
|
||||
QTest::newRow( "mIntZero_mTextString" ) << mIntZero << mTextString << false;
|
||||
QTest::newRow( "mTextString_mIntZero" ) << mTextString << mIntZero << false;
|
||||
QTest::newRow( "mIntZero_mTextQString" ) << mIntZero << mTextQString << false;
|
||||
QTest::newRow( "mTextQString_mIntZero" ) << mTextQString << mIntZero << false;
|
||||
|
||||
QTest::newRow( "mUInt_mUIntString" ) << mUInt << mUIntString << false;
|
||||
QTest::newRow( "mUIntString_mUInt" ) << mUIntString << mUInt << false;
|
||||
QTest::newRow( "mUInt_mUIntQString" ) << mUInt << mUIntQString << true;
|
||||
@ -1625,6 +1647,11 @@ void tst_QVariant::operator_eq_eq_data()
|
||||
QTest::newRow( "mDouble_mDoubleQString" ) << mDouble << mDoubleQString << true;
|
||||
QTest::newRow( "mDoubleQString_mDouble" ) << mDoubleQString << mDouble << true;
|
||||
|
||||
QTest::newRow( "mDouble_mTextString" ) << mDouble << mTextString << false;
|
||||
QTest::newRow( "mTextString_mDouble" ) << mTextString << mDouble << false;
|
||||
QTest::newRow( "mDouble_mTextQString" ) << mDouble << mTextQString << false;
|
||||
QTest::newRow( "mTextQString_mDouble" ) << mTextQString << mDouble << false;
|
||||
|
||||
QTest::newRow( "mFloat_mFloatString" ) << mFloat << mFloatString << false;
|
||||
QTest::newRow( "mFloatString_mFloat" ) << mFloatString << mFloat << false;
|
||||
QTest::newRow( "mFloat_mFloatQString" ) << mFloat << mFloatQString << true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user