From 52b905eb14779e8acec423a1701d78bb2c7fe275 Mon Sep 17 00:00:00 2001 From: ElectronixTM Date: Sat, 29 Mar 2025 22:24:30 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B2=D1=8B=D0=B1=D1=80=D0=B0=D1=81=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B2=20=D0=BD=D0=B5=D0=BA?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5=20=D0=BC=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit так странно написано потому что я уверен, что будут еще другие исключительные случаи и корнеркейсы, которые я забыл --- src/vm.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/vm.py b/src/vm.py index 88b62a0..5569eb1 100644 --- a/src/vm.py +++ b/src/vm.py @@ -119,6 +119,11 @@ class VM: """ Make one step (only step into) """ + if self.pc.value * 4 > len(self.mem) - 4: + raise VMException( + VMExceptionType.END_OF_MEM, + self.pc.value + ) opcode = self.mem[self.pc.value * 4] opdesc = self._fetch_opcode_desc(opcode) args = self._parse_arguments(opdesc) @@ -148,6 +153,11 @@ class VM: self.continue_() def _fetch_opcode_desc(self, opcode: int): + if not opcode in OPCODES: + raise VMException( + VMExceptionType.INVALID_OPCODE, + self.pc.value + ) return OPCODES[opcode] def _parse_arguments(self, opdesc: OpcodeDescription) -> tuple[int, ...]: