Bug 1310744: Bail out from SetOrExtendBoxedOrUnboxedDenseElements if the elements are frozen. r?nbp draft
authorEmilio Cobos Álvarez <ecoal95@gmail.com>
Wed, 19 Oct 2016 20:34:46 +0200
changeset 427481 08b9a25cfe4056205de969de90394733b6d75ef8
parent 427480 e7a73368994ca6d5c9a4082090f37c3d6d17fc24
child 427482 dc493a55b5b459c48b100202ffd62724d69c55a9
push id33026
push userbmo:ecoal95@gmail.com
push dateThu, 20 Oct 2016 12:41:55 +0000
reviewersnbp
bugs1310744
milestone52.0a1
Bug 1310744: Bail out from SetOrExtendBoxedOrUnboxedDenseElements if the elements are frozen. r?nbp MozReview-Commit-ID: 9INusCjjn9K
js/src/vm/UnboxedObject-inl.h
--- a/js/src/vm/UnboxedObject-inl.h
+++ b/js/src/vm/UnboxedObject-inl.h
@@ -473,16 +473,19 @@ template <JSValueType Type>
 static inline DenseElementResult
 SetOrExtendBoxedOrUnboxedDenseElements(ExclusiveContext* cx, JSObject* obj,
                                        uint32_t start, const Value* vp, uint32_t count,
                                        ShouldUpdateTypes updateTypes = ShouldUpdateTypes::Update)
 {
     if (Type == JSVAL_TYPE_MAGIC) {
         NativeObject* nobj = &obj->as<NativeObject>();
 
+        if (nobj->denseElementsAreFrozen())
+            return DenseElementResult::Incomplete;
+
         if (obj->is<ArrayObject>() &&
             !obj->as<ArrayObject>().lengthIsWritable() &&
             start + count >= obj->as<ArrayObject>().length())
         {
             return DenseElementResult::Incomplete;
         }
 
         DenseElementResult result = nobj->ensureDenseElements(cx, start, count);