From 965588737321d10fd1fbca3f89b4c6257b7b5d47 Mon Sep 17 00:00:00 2001 From: Matthew Vogt Date: Fri, 23 Mar 2012 14:16:43 +1000 Subject: Restrict v8 property lookup to the execution context When resolving property names, only properties known to the current context of execution should be available. If a property name has been overriden by a component extension, code executing in the context of the base component should resolve the property name to the property available inside the base component or its bases. Task-number: QTBUG-24891 Change-Id: I9687cc28e108226d5a939627a901c8254344b598 Reviewed-by: Michael Brasser Reviewed-by: Martin Jones --- src/qml/qml/qqmlproperty.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/qml/qml/qqmlproperty.cpp') diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp index a239b458f3..ded891a061 100644 --- a/src/qml/qml/qqmlproperty.cpp +++ b/src/qml/qml/qqmlproperty.cpp @@ -284,7 +284,7 @@ void QQmlPropertyPrivate::initProperty(QObject *obj, const QString &name) QQmlPropertyData local; QQmlPropertyData *property = - QQmlPropertyCache::property(engine, obj, pathName, local); + QQmlPropertyCache::property(engine, obj, pathName, context, local); if (!property) return; // Not a property if (property->isFunction()) @@ -340,7 +340,7 @@ void QQmlPropertyPrivate::initProperty(QObject *obj, const QString &name) if (ddata && ddata->propertyCache) { // Try method - QQmlPropertyData *d = ddata->propertyCache->property(signalName); + QQmlPropertyData *d = ddata->propertyCache->property(signalName, currentObject, context); while (d && !d->isFunction()) d = ddata->propertyCache->overrideData(d); @@ -353,7 +353,7 @@ void QQmlPropertyPrivate::initProperty(QObject *obj, const QString &name) // Try property if (signalName.endsWith(QLatin1String("Changed"))) { QString propName = signalName.mid(0, signalName.length() - 7); - QQmlPropertyData *d = ddata->propertyCache->property(propName); + QQmlPropertyData *d = ddata->propertyCache->property(propName, currentObject, context); while (d && d->isFunction()) d = ddata->propertyCache->overrideData(d); @@ -378,7 +378,7 @@ void QQmlPropertyPrivate::initProperty(QObject *obj, const QString &name) // Property QQmlPropertyData local; QQmlPropertyData *property = - QQmlPropertyCache::property(engine, currentObject, terminal, local); + QQmlPropertyCache::property(engine, currentObject, terminal, context, local); if (property && !property->isFunction()) { object = currentObject; core = *property; -- cgit v1.2.3