diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-11-01 14:50:38 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-11-01 16:05:25 +0100 |
commit | 51a2943c018cc435cd840b7f8b6f3b1bff3c96e8 (patch) | |
tree | 801ebb5ed4488949f7ae1679575f054d4db6fb9d /src/qml/jsruntime/qv4lookup.cpp | |
parent | c542686675f1bdf481995a980883e706c6044e32 (diff) |
Fix a bug in the inserting setters
Make sure we have allocated enough storage for
properties before writing them.
Change-Id: I3232ad1c4f17c21b48e8b444dc9ca604745dc799
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4lookup.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4lookup.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/qml/jsruntime/qv4lookup.cpp b/src/qml/jsruntime/qv4lookup.cpp index eaccce1f96..4123e95d87 100644 --- a/src/qml/jsruntime/qv4lookup.cpp +++ b/src/qml/jsruntime/qv4lookup.cpp @@ -473,6 +473,8 @@ void Lookup::setterInsert0(Lookup *l, const ValueRef object, const ValueRef valu Object *o = object->asObject(); if (o && o->internalClass == l->classList[0]) { if (!o->prototype()) { + if (l->index >= o->memberDataAlloc) + o->ensureMemberIndex(l->index); o->memberData[l->index].value = *value; o->internalClass = l->classList[3]; return; @@ -489,6 +491,8 @@ void Lookup::setterInsert1(Lookup *l, const ValueRef object, const ValueRef valu if (o && o->internalClass == l->classList[0]) { Object *p = o->prototype(); if (p && p->internalClass == l->classList[1]) { + if (l->index >= o->memberDataAlloc) + o->ensureMemberIndex(l->index); o->memberData[l->index].value = *value; o->internalClass = l->classList[3]; return; @@ -507,7 +511,8 @@ void Lookup::setterInsert2(Lookup *l, const ValueRef object, const ValueRef valu if (p && p->internalClass == l->classList[1]) { p = p->prototype(); if (p && p->internalClass == l->classList[2]) { - o->ensureMemberIndex(l->index); + if (l->index >= o->memberDataAlloc) + o->ensureMemberIndex(l->index); o->memberData[l->index].value = *value; o->internalClass = l->classList[3]; return; |