Using the memory address of the QVariant that acts as buffer is bad. While we got
lucky with Qt4, and this worked by accident, it leads to subtle and not-so-subtle segfaults
when used with Qt5.
Instead, using QVariant::data() makes sure that implicitly shared data is properly detached.
qWarning() << "SyncableObject::toVariantMap(): cannot fetch init data for:" << this << method.signature() << "- Returntype is unknown to Qt's MetaSystem:" << QByteArray(method.typeName());
continue;
}
qWarning() << "SyncableObject::toVariantMap(): cannot fetch init data for:" << this << method.signature() << "- Returntype is unknown to Qt's MetaSystem:" << QByteArray(method.typeName());
continue;
}
- QVariant value = QVariant(variantType);
- QGenericReturnArgument genericvalue = QGenericReturnArgument(method.typeName(), &value);
+
+ QVariant value(variantType, (const void *) 0);
+ QGenericReturnArgument genericvalue = QGenericReturnArgument(method.typeName(), value.data());
QMetaObject::invokeMethod(this, methodname.toAscii(), genericvalue);
properties[SignalProxy::ExtendedMetaObject::methodBaseName(method)] = value;
}
QMetaObject::invokeMethod(this, methodname.toAscii(), genericvalue);
properties[SignalProxy::ExtendedMetaObject::methodBaseName(method)] = value;
}
- // properties["Payload"] = QByteArray(10000000, 'a'); // for testing purposes
}
void SyncableObject::fromVariantMap(const QVariantMap &properties) {
}
void SyncableObject::fromVariantMap(const QVariantMap &properties) {