diff --git a/js/src/builtin/TypedObject.cpp b/js/src/builtin/TypedObject.cpp index e223cc3dbdfe..0feb9a87a624 100644 --- a/js/src/builtin/TypedObject.cpp +++ b/js/src/builtin/TypedObject.cpp @@ -911,6 +911,12 @@ StructMetaTypeDescr::layout(JSContext *cx, return false; } + if (!JSObject::freeze(cx, fieldOffsets)) + return false; + + if (!JSObject::freeze(cx, fieldTypes)) + return false; + RootedValue fieldOffsetsValue(cx, ObjectValue(*fieldOffsets)); if (!JSObject::defineProperty(cx, structType, cx->names().fieldOffsets, fieldOffsetsValue, nullptr, nullptr, diff --git a/js/src/tests/ecma_6/TypedObject/structtypereflection.js b/js/src/tests/ecma_6/TypedObject/structtypereflection.js index 9305f95019a9..44b450500cba 100644 --- a/js/src/tests/ecma_6/TypedObject/structtypereflection.js +++ b/js/src/tests/ecma_6/TypedObject/structtypereflection.js @@ -36,6 +36,10 @@ function runTests() { assertEq(S.fieldOffsets.y, 4); assertEq(S.fieldOffsets.z, 8); + // fieldTypes and fieldOffsets should be frozen + assertEq(Object.isFrozen(S.fieldTypes), true); + assertEq(Object.isFrozen(S.fieldOffsets), true); + if (typeof reportCompare === "function") reportCompare(true, true); print("Tests complete");