@@ -1640,6 +1640,9 @@ bool InitField(InterpState &S, CodePtr OpPC, uint32_t I) {
16401640 const Pointer &Ptr = S.Stk .peek <Pointer>();
16411641 if (!CheckRange (S, OpPC, Ptr, CSK_Field))
16421642 return false ;
1643+ if (!CheckArray (S, OpPC, Ptr))
1644+ return false ;
1645+
16431646 const Pointer &Field = Ptr.atField (I);
16441647 Field.deref <T>() = Value;
16451648 Field.initialize ();
@@ -1652,6 +1655,9 @@ bool InitFieldActivate(InterpState &S, CodePtr OpPC, uint32_t I) {
16521655 const Pointer &Ptr = S.Stk .peek <Pointer>();
16531656 if (!CheckRange (S, OpPC, Ptr, CSK_Field))
16541657 return false ;
1658+ if (!CheckArray (S, OpPC, Ptr))
1659+ return false ;
1660+
16551661 const Pointer &Field = Ptr.atField (I);
16561662 Field.deref <T>() = Value;
16571663 Field.activate ();
@@ -1663,7 +1669,13 @@ template <PrimType Name, class T = typename PrimConv<Name>::T>
16631669bool InitBitField (InterpState &S, CodePtr OpPC, const Record::Field *F) {
16641670 assert (F->isBitField ());
16651671 const T &Value = S.Stk .pop <T>();
1666- const Pointer &Field = S.Stk .peek <Pointer>().atField (F->Offset );
1672+ const Pointer &Ptr = S.Stk .peek <Pointer>();
1673+ if (!CheckRange (S, OpPC, Ptr, CSK_Field))
1674+ return false ;
1675+ if (!CheckArray (S, OpPC, Ptr))
1676+ return false ;
1677+
1678+ const Pointer &Field = Ptr.atField (F->Offset );
16671679
16681680 if constexpr (needsAlloc<T>()) {
16691681 T Result = S.allocAP <T>(Value.bitWidth ());
@@ -1689,7 +1701,13 @@ bool InitBitFieldActivate(InterpState &S, CodePtr OpPC,
16891701 const Record::Field *F) {
16901702 assert (F->isBitField ());
16911703 const T &Value = S.Stk .pop <T>();
1692- const Pointer &Field = S.Stk .peek <Pointer>().atField (F->Offset );
1704+ const Pointer &Ptr = S.Stk .peek <Pointer>();
1705+ if (!CheckRange (S, OpPC, Ptr, CSK_Field))
1706+ return false ;
1707+ if (!CheckArray (S, OpPC, Ptr))
1708+ return false ;
1709+
1710+ const Pointer &Field = Ptr.atField (F->Offset );
16931711
16941712 if constexpr (needsAlloc<T>()) {
16951713 T Result = S.allocAP <T>(Value.bitWidth ());
0 commit comments