aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4lookup.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-11-01 14:50:38 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-01 16:05:25 +0100
commit51a2943c018cc435cd840b7f8b6f3b1bff3c96e8 (patch)
tree801ebb5ed4488949f7ae1679575f054d4db6fb9d /src/qml/jsruntime/qv4lookup.cpp
parentc542686675f1bdf481995a980883e706c6044e32 (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.cpp7
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;