diff options
author | Erik Verbruggen <[email protected]> | 2018-02-13 15:20:22 +0100 |
---|---|---|
committer | Erik Verbruggen <[email protected]> | 2018-02-14 08:28:06 +0000 |
commit | 9e32901835de1c6729ac8bf228148c1e03c4c5a5 (patch) | |
tree | 679006df94baa86ce04de829d005282a2c03c075 /src/qml/jsruntime/qv4internalclass.cpp | |
parent | 874cd47ae427e6f08a6e362f28af5038a2bc9872 (diff) |
Clear the last value when removing properties
When we remove a property from an object, we shrink the used entries
by one (or 2 when an accessor is defined) by moving subsequent entries
"down" over the removed entry. We also have to set the last entry (or 2)
to Undefined, otherwise any heap objects referenced there would be
retained.
Task-number: QTBUG-66090
Change-Id: I75905fafd0d88891820d894a869b9714bc9807e0
Reviewed-by: Lars Knoll <[email protected]>
Diffstat (limited to 'src/qml/jsruntime/qv4internalclass.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4internalclass.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4internalclass.cpp b/src/qml/jsruntime/qv4internalclass.cpp index d439884ca2..4041052344 100644 --- a/src/qml/jsruntime/qv4internalclass.cpp +++ b/src/qml/jsruntime/qv4internalclass.cpp @@ -149,6 +149,9 @@ static void removeFromPropertyData(Object *object, int idx, bool accessor = fals int size = o->internalClass->size; for (int i = idx; i < size; ++i) o->setProperty(v4, i, *o->propertyData(i + (accessor ? 2 : 1))); + o->setProperty(v4, size, Primitive::undefinedValue()); + if (accessor) + o->setProperty(v4, size + 1, Primitive::undefinedValue()); } void InternalClass::changeMember(Object *object, String *string, PropertyAttributes data, uint *index) |