summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2023-01-25 13:24:18 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-01-25 16:22:57 +0000
commit380105538c3a9bc76dcbe6a5af26aebbb71a838f (patch)
tree98051ffc89f5ebf96861d47fb4b8aaea7be38bda
parentec2f9c6bcd28e84f82ad7de3ce89794febf61a60 (diff)
StateMachine: Don't crash if no signal is passed to SignalTransition
Rather, just reset the transition. Fixes: QTBUG-110286 Change-Id: Ic25a6c7b841a47b180e1a62c7bdbd2e388cdc293 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Juha Vuolle <juha.vuolle@qt.io> (cherry picked from commit af4c8da54bbf057f3a8d7cf8a8e4146d35aad7f6) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/statemachineqml/signaltransition.cpp6
-rw-r--r--tests/auto/qml/qqmlstatemachine/data/signaltransition.qml4
2 files changed, 9 insertions, 1 deletions
diff --git a/src/statemachineqml/signaltransition.cpp b/src/statemachineqml/signaltransition.cpp
index 9963d31..95b20f0 100644
--- a/src/statemachineqml/signaltransition.cpp
+++ b/src/statemachineqml/signaltransition.cpp
@@ -203,7 +203,11 @@ void SignalTransition::connectTriggered()
QV4::Scope scope(jsEngine);
QV4::Scoped<QV4::QObjectMethod> qobjectSignal(
scope, QJSValuePrivate::asReturnedValue(&m_signal.value()));
- Q_ASSERT(qobjectSignal);
+ if (!qobjectSignal) {
+ m_signalExpression.adopt(nullptr);
+ return;
+ }
+
QMetaMethod metaMethod = target->metaObject()->method(qobjectSignal->methodIndex());
int signalIndex = QMetaObjectPrivate::signalIndex(metaMethod);
diff --git a/tests/auto/qml/qqmlstatemachine/data/signaltransition.qml b/tests/auto/qml/qqmlstatemachine/data/signaltransition.qml
index 52c62a7..09f344a 100644
--- a/tests/auto/qml/qqmlstatemachine/data/signaltransition.qml
+++ b/tests/auto/qml/qqmlstatemachine/data/signaltransition.qml
@@ -48,4 +48,8 @@ Item {
guard: 2 + 2
}
+ SignalTransition {
+ // Do not crash on SignalTransition without signal
+ onTriggered: () => {}
+ }
}