From b87eac8cd9d8428556df026871dbf555e6c29aec Mon Sep 17 00:00:00 2001 From: dgp Date: Thu, 3 Aug 2023 20:00:01 +0000 Subject: Add DECACHE/CACHE_STACK_INFO() protections to calls out of the bytecode execution engine to avoid panics from corrupted execution stack. --- generic/tclExecute.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/generic/tclExecute.c b/generic/tclExecute.c index 097c60e..7e7b1f9 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -3377,8 +3377,12 @@ TEBCresume( goto gotError; } if (Tcl_IsShared(objResultPtr)) { - Tcl_Obj *newValue = TclDuplicatePureObj( - interp, objResultPtr, &tclListType); + Tcl_Obj *newValue; + + DECACHE_STACK_INFO(); + newValue = TclDuplicatePureObj(interp, objResultPtr, &tclListType); + CACHE_STACK_INFO(); + if (!newValue) { TRACE_ERROR(interp); goto gotError; @@ -3441,8 +3445,10 @@ TEBCresume( goto gotError; } else { if (Tcl_IsShared(objResultPtr)) { + DECACHE_STACK_INFO(); valueToAssign = TclDuplicatePureObj( interp, objResultPtr, &tclListType); + CACHE_STACK_INFO(); if (!valueToAssign) { goto errorInLappendListPtr; } @@ -6462,10 +6468,11 @@ TEBCresume( i, O2S(listPtr), O2S(Tcl_GetObjResult(interp)))); goto gotError; } - CACHE_STACK_INFO(); if (Tcl_IsShared(listPtr)) { + DECACHE_STACK_INFO(); objPtr = TclDuplicatePureObj( interp, listPtr, &tclListType); + CACHE_STACK_INFO(); if (!objPtr) { goto gotError; } -- cgit v0.12