diff --git a/ecmascript/object_fast_operator-inl.h b/ecmascript/object_fast_operator-inl.h index 9ca4faf4a8a78e32d264a6b0986ab158de1bfaf8..232b4c5140cf6c475d11038e342165fe03d91216 100644 --- a/ecmascript/object_fast_operator-inl.h +++ b/ecmascript/object_fast_operator-inl.h @@ -1219,10 +1219,12 @@ JSTaggedValue ObjectFastOperator::GetContainerProperty(JSThread *thread, JSTagge res = JSAPIPlainArray::Cast(receiver.GetTaggedObject())->Get(thread, JSTaggedValue(index)); break; case JSType::JS_API_DEQUE: - res = JSAPIDeque::Cast(receiver.GetTaggedObject())->Get(thread, index); + res = JSAPIDeque::GetProperty(thread, JSHandle(thread, receiver), + JSHandle(thread, JSTaggedValue(index))).GetValue().GetTaggedValue(); break; case JSType::JS_API_STACK: - res = JSAPIStack::Cast(receiver.GetTaggedObject())->Get(thread, index); + res = JSAPIStack::GetProperty(thread, JSHandle(thread, receiver), + JSHandle(thread, JSTaggedValue(index))).GetValue().GetTaggedValue(); break; case JSType::JS_API_VECTOR: { auto self = JSHandle(thread, receiver); diff --git a/test/moduletest/container/container_deque.js b/test/moduletest/container/container_deque.js index 87b9794be9f4e72e969a257e0f35190b60909748..9e7c16a94eb57cc50c6d8c5e44d68eeda831ec8d 100644 --- a/test/moduletest/container/container_deque.js +++ b/test/moduletest/container/container_deque.js @@ -274,6 +274,19 @@ if (globalThis["ArkPrivate"] != undefined) { Object.assign(v1,v5) print(JSON.stringify(v1)) const v6 = new Deque() + + { + try { + const v1 = new Deque(); + const v4 = Array(4); + v4.__proto__ = v1; + JSON.stringify(v4); + map.set("test deque as _proto_ stringify:", false); + } catch (e) { + + } + } + try { v6[4294967295] } catch (error) { diff --git a/test/moduletest/container/container_stack.js b/test/moduletest/container/container_stack.js index e3587fcb56a9064a017477dc89a8d23a663ef994..8637a56d949210036fd6ca9ba64f1b050e4a62f2 100644 --- a/test/moduletest/container/container_stack.js +++ b/test/moduletest/container/container_stack.js @@ -58,6 +58,18 @@ if (globalThis["ArkPrivate"] != undefined) { map.set("test stack forEach:", res) + { + try{ + const v1 = new Stack(); + const v4 = Array(4); + v4.__proto__ = v1; + JSON.stringify(v4); + map.set("test stack as _proto_ stringify:", false); + } catch (e) { + + } + } + res = true let j = 0 for (const data of proxy) {