From 76da530aca3876cc083988b883658673168821a4 Mon Sep 17 00:00:00 2001 From: Teemu Holappa Date: Fri, 11 Oct 2019 14:30:00 +0300 Subject: Fix float value binding to an integer Also NaN values are casted to an integer which causes illegal integer values. Task-number: QTBUG-72442 Change-Id: I3ff3c8e4dc493600360448ea30d949c0017da8c3 Reviewed-by: Simon Hausmann --- src/qml/qml/qqmlbinding.cpp | 5 +++-- tests/auto/qml/qqmlbinding/data/nanPropertyToInt.qml | 14 ++++++++++++++ tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp | 11 +++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 tests/auto/qml/qqmlbinding/data/nanPropertyToInt.qml diff --git a/src/qml/qml/qqmlbinding.cpp b/src/qml/qml/qqmlbinding.cpp index 3a437eab8d..52572be2b2 100644 --- a/src/qml/qml/qqmlbinding.cpp +++ b/src/qml/qml/qqmlbinding.cpp @@ -298,8 +298,9 @@ protected: case QMetaType::Int: if (result.isInteger()) return doStore(result.integerValue(), pd, flags); - else if (result.isNumber()) - return doStore(result.doubleValue(), pd, flags); + else if (result.isNumber()) { + return doStore(QV4::StaticValue::toInteger(result.doubleValue()), pd, flags); + } break; case QMetaType::Double: if (result.isNumber()) diff --git a/tests/auto/qml/qqmlbinding/data/nanPropertyToInt.qml b/tests/auto/qml/qqmlbinding/data/nanPropertyToInt.qml new file mode 100644 index 0000000000..366dbf0464 --- /dev/null +++ b/tests/auto/qml/qqmlbinding/data/nanPropertyToInt.qml @@ -0,0 +1,14 @@ +import QtQuick 2.11 + +Item { + visible: true + width: 320 + height: 200 + property int val: other.val + + Rectangle { + id: other + anchors.fill: parent; + property int val: undefined / 2 + } +} diff --git a/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp b/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp index 2c2d311ff7..2610402455 100644 --- a/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp +++ b/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp @@ -56,6 +56,7 @@ private slots: void bindingOverwriting(); void bindToQmlComponent(); void bindingDoesNoWeirdConversion(); + void bindNaNToInt(); private: QQmlEngine engine; @@ -398,6 +399,16 @@ void tst_qqmlbinding::bindingDoesNoWeirdConversion() QVERIFY(colorLabel); } +//QTBUG-72442 +void tst_qqmlbinding::bindNaNToInt() +{ + QQmlEngine engine; + QQmlComponent c(&engine, testFileUrl("nanPropertyToInt.qml")); + QScopedPointer item(qobject_cast(c.create())); + + QVERIFY(item != nullptr); + QCOMPARE(item->property("val").toInt(), 0); +} QTEST_MAIN(tst_qqmlbinding) #include "tst_qqmlbinding.moc" -- cgit v1.2.3