From b5229df6a08a902b11a2fc9529af6385f4d985d5 Mon Sep 17 00:00:00 2001 From: Milian Wolff Date: Mon, 7 Aug 2017 23:24:57 +0200 Subject: Do not crash on non-QVariant return types Patch e354bdc5 introduced a regression that triggers a crash in Qt 5.9 when returning a type that is not implicitly convertible to QVariant, such as a QJsonValue, from an invoked method/slot. This patch fixes this situation and adds proper unit test coverage. Change-Id: Ib8cb0c96e7496bc8dc9a628245d7a44e4234aff0 Task-number: QTBUG-62045 Reviewed-by: Frederik Gladhorn Reviewed-by: Kai Dohmen --- src/webchannel/qmetaobjectpublisher.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp index dcc589c..cfc6ad2 100644 --- a/src/webchannel/qmetaobjectpublisher.cpp +++ b/src/webchannel/qmetaobjectpublisher.cpp @@ -383,12 +383,12 @@ QVariant QMetaObjectPublisher::invokeMethod(QObject *const object, const int met arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9]); } else { - QGenericReturnArgument returnArgument(method.typeName(), returnValue.data()); - // Only init variant with return type if its not a variant itself, which would // lead to nested variants which is not what we want. if (method.returnType() != QMetaType::QVariant) returnValue = QVariant(method.returnType(), 0); + + QGenericReturnArgument returnArgument(method.typeName(), returnValue.data()); method.invoke(object, returnArgument, arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9]); -- cgit v1.2.1