diff --git a/Include/internal/pycore_interpframe.h b/Include/internal/pycore_interpframe.h index 097da4edee1aaf..1d373d55ab2de8 100644 --- a/Include/internal/pycore_interpframe.h +++ b/Include/internal/pycore_interpframe.h @@ -163,15 +163,17 @@ _PyFrame_GetLocalsArray(_PyInterpreterFrame *frame) return frame->localsplus; } -/* Fetches the stack pointer, and sets stackpointer to NULL. - Having stackpointer == NULL ensures that invalid - values are not visible to the cycle GC. */ +// Fetches the stack pointer, and (on debug builds) sets stackpointer to NULL. +// Having stackpointer == NULL makes it easier to catch missing stack pointer +// spills/restores (which could expose invalid values to the GC) using asserts. static inline _PyStackRef* _PyFrame_GetStackPointer(_PyInterpreterFrame *frame) { assert(frame->stackpointer != NULL); _PyStackRef *sp = frame->stackpointer; +#ifndef NDEBUG frame->stackpointer = NULL; +#endif return sp; }
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: