Commit 68a7acc9 authored by Kevin Funk's avatar Kevin Funk Committed by Kevin Funk
Browse files

QRemoteObjectNode: Fix crash on bogus input


Make sure QtRemoteObjects does not crash if we pass invalid urls to the
QRemoteObjectNode/QRemoteObjectHost constructor

Change-Id: I6db749ac7901f989cfaa73084d88fbd763ad9178
Reviewed-by: default avatarContinuous Integration (KDAB) <build@kdab.com>
Reviewed-by: default avatarBrett Stottlemyer <bstottle@ford.com>
Showing with 31 additions and 1 deletion
......@@ -437,7 +437,7 @@ QReplicaPrivateInterface *QRemoteObjectNodePrivate::handleNewAcquire(const QMeta
QReplicaPrivateInterface *QRemoteObjectHostBasePrivate::handleNewAcquire(const QMetaObject *meta, QRemoteObjectReplica *instance, const QString &name)
{
QMap<QString, QRemoteObjectSource*>::const_iterator mapIt;
if (map_contains(remoteObjectIo->m_remoteObjects, name, mapIt)) {
if (remoteObjectIo && map_contains(remoteObjectIo->m_remoteObjects, name, mapIt)) {
Q_Q(QRemoteObjectHostBase);
QInProcessReplicaPrivate *rp = new QInProcessReplicaPrivate(name, meta, q);
rp->configurePrivate(instance);
......@@ -1077,6 +1077,11 @@ void QRemoteObjectNodePrivate::setRegistry(QRemoteObjectRegistry *reg)
bool QRemoteObjectNode::waitForRegistry(int timeout)
{
Q_D(QRemoteObjectNode);
if (!d->registry) {
qCWarning(QT_REMOTEOBJECT) << qPrintable(objectName()) << "waitForRegistry() error: No valid registry url set";
return false;
}
return d->registry->waitForSource(timeout);
}
......
......@@ -448,6 +448,31 @@ private slots:
QCOMPARE(localCentre->data4(), QVector<int>() << 1 << 2 << 3 << 4 << 5);
}
void invalidUrlsTest()
{
const QUrl invalidUrl;
{
QRemoteObjectHost host(invalidUrl, registryUrl);
SET_NODE_NAME(host);
const bool res = host.waitForRegistry(3000);
QVERIFY(!res);
}
{
QRemoteObjectHost host(hostUrl, invalidUrl);
SET_NODE_NAME(host);
const bool res = host.waitForRegistry(3000);
QVERIFY(!res);
}
{
QRemoteObjectHost host(invalidUrl, invalidUrl);
SET_NODE_NAME(host);
const bool res = host.waitForRegistry(3000);
QVERIFY(!res);
}
}
void noRegistryTest()
{
QRemoteObjectHost host(hostUrl, registryUrl);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment