From 51911f7186b8a511a2ff1359e1fececaa007f4a6 Mon Sep 17 00:00:00 2001 From: Alexander Batalov Date: Tue, 5 Jul 2022 10:26:52 +0300 Subject: [PATCH] Add stack guards --- src/interpreter.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/interpreter.cc b/src/interpreter.cc index 45bced9..1619a53 100644 --- a/src/interpreter.cc +++ b/src/interpreter.cc @@ -2929,6 +2929,10 @@ static void interpreterPrintStats() void programStackPushValue(Program* program, ProgramValue& programValue) { + if (program->stackValues->size() > 0x1000) { + programFatalError("programStackPushValue: Stack overflow."); + } + program->stackValues->push_back(programValue); if (programValue.opcode == VALUE_TYPE_DYNAMIC_STRING) { @@ -2970,6 +2974,10 @@ void programStackPushPointer(Program* program, void* value) ProgramValue programStackPopValue(Program* program) { + if (program->stackValues->empty()) { + programFatalError("programStackPopValue: Stack underflow."); + } + ProgramValue programValue = program->stackValues->back(); program->stackValues->pop_back(); @@ -3018,6 +3026,10 @@ void* programStackPopPointer(Program* program) void programReturnStackPushValue(Program* program, ProgramValue& programValue) { + if (program->returnStackValues->size() > 0x1000) { + programFatalError("programReturnStackPushValue: Stack overflow."); + } + program->returnStackValues->push_back(programValue); if (programValue.opcode == VALUE_TYPE_DYNAMIC_STRING) { @@ -3043,6 +3055,10 @@ void programReturnStackPushPointer(Program* program, void* value) ProgramValue programReturnStackPopValue(Program* program) { + if (program->returnStackValues->empty()) { + programFatalError("programReturnStackPopValue: Stack underflow."); + } + ProgramValue programValue = program->returnStackValues->back(); program->returnStackValues->pop_back();