diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-09-08 22:29:47 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-09-09 15:52:02 +0000 |
commit | 009a125d07448428a00abec70a894febe759adec (patch) | |
tree | c3c7411073517ce1931e4968f9928085d00782f6 /src/qml/jsruntime/qv4objectiterator_p.h | |
parent | 5d470f51214b273951cc7612ee018fc347716836 (diff) |
Fix ownKey iteration over Proxy objects
Change-Id: I045a4844c06df9232cc8b04485ab0a39bb990e3f
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4objectiterator_p.h')
-rw-r--r-- | src/qml/jsruntime/qv4objectiterator_p.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/qml/jsruntime/qv4objectiterator_p.h b/src/qml/jsruntime/qv4objectiterator_p.h index 8d7b5512d4..0a5bcfc7ed 100644 --- a/src/qml/jsruntime/qv4objectiterator_p.h +++ b/src/qml/jsruntime/qv4objectiterator_p.h @@ -75,7 +75,8 @@ struct Q_QML_EXPORT ObjectIterator object = static_cast<Object *>(scope.alloc()); this->flags = flags; object->setM(o ? o->m() : nullptr); - iterator = object->ownPropertyKeys(); + if (o) + iterator = object->ownPropertyKeys(object); } ~ObjectIterator() { @@ -93,6 +94,7 @@ namespace Heap { #define ForInIteratorObjectMembers(class, Member) \ Member(class, Pointer, Object *, object) \ Member(class, Pointer, Object *, current) \ + Member(class, Pointer, Object *, target) \ Member(class, NoMark, OwnPropertyKeyIterator *, iterator) DECLARE_HEAP_OBJECT(ForInIteratorObject, Object) { @@ -130,7 +132,10 @@ void Heap::ForInIteratorObject::init(QV4::Object *o) return; object.set(o->engine(), o->d()); current.set(o->engine(), o->d()); - iterator = o->ownPropertyKeys(); + Scope scope(o); + ScopedObject obj(scope); + iterator = o->ownPropertyKeys(obj.getRef()); + target.set(o->engine(), obj->d()); } |