diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2017-05-19 15:50:11 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2017-06-01 12:05:01 +0000 |
commit | 27c4c643bae356d5bbdb58e44ec4b7932f277886 (patch) | |
tree | 79538b7e14c42c8f451e4435ea7722a3a12081b7 | |
parent | c949dfa143c9d3b9a43f643058b8dc35c2de89fb (diff) |
Fix a crash when log tag doesn't contain the expr attribute
Don't try to evaluate to string NoEvaluator is for log.
Task-number: QTBUG-59568
Change-Id: Id2faa7f8b94aa18e8611aafcaa9f27217f5a4a9c
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
-rw-r--r-- | src/scxml/qscxmlexecutablecontent.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/scxml/qscxmlexecutablecontent.cpp b/src/scxml/qscxmlexecutablecontent.cpp index 682ea47..2401aa6 100644 --- a/src/scxml/qscxmlexecutablecontent.cpp +++ b/src/scxml/qscxmlexecutablecontent.cpp @@ -418,15 +418,17 @@ const InstructionId *QScxmlExecutionEngine::step(const InstructionId *ip, bool * qCDebug(qscxmlLog) << stateMachine << "Executing log step"; const Log *log = reinterpret_cast<const Log *>(instr); ip += log->size(); - QString str = dataModel->evaluateToString(log->expr, ok); - if (*ok) { - const QString label = tableData->string(log->label); - qCDebug(scxmlLog) << label << ":" << str; - QMetaObject::invokeMethod(stateMachine, - "log", - Qt::QueuedConnection, - Q_ARG(QString, label), - Q_ARG(QString, str)); + if (log->expr != NoEvaluator) { + const QString str = dataModel->evaluateToString(log->expr, ok); + if (*ok) { + const QString label = tableData->string(log->label); + qCDebug(scxmlLog) << label << ":" << str; + QMetaObject::invokeMethod(stateMachine, + "log", + Qt::QueuedConnection, + Q_ARG(QString, label), + Q_ARG(QString, str)); + } } return ip; } |