Skip to content

Commit

Permalink
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Browse files Browse the repository at this point in the history
couple of potential stack overflows, including bug #110615.

closes patch #101238
  • Loading branch information
Fredrik Lundh committed Aug 27, 2000
1 parent 0ae722e commit 2f15b25
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
14 changes: 13 additions & 1 deletion Include/pythonrun.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,20 @@ DL_IMPORT(void) PyOS_FiniInterrupts(void);
DL_IMPORT(char *) PyOS_Readline(char *);
extern DL_IMPORT(int) (*PyOS_InputHook)(void);
extern DL_IMPORT(char) *(*PyOS_ReadlineFunctionPointer)(char *);

/* Stack size, in "pointers" (so we get extra safety margins
on 64-bit platforms). On a 32-bit platform, this translates
to a 8k margin. */
#define PYOS_STACK_MARGIN 2048

#if defined(WIN32) && defined(_MSC_VER)
/* Enable stack checking under Microsoft C */
#define USE_STACKCHECK
#endif

#ifdef USE_STACKCHECK
int PyOS_CheckStack(void); /* Check that we aren't overflowing our stack */
/* Check that we aren't overflowing our stack */
DL_IMPORT(int) PyOS_CheckStack(void);
#endif

#ifdef __cplusplus
Expand Down
29 changes: 29 additions & 0 deletions Python/pythonrun.c
Original file line number Diff line number Diff line change
Expand Up @@ -1165,3 +1165,32 @@ Py_FdIsInteractive(FILE *fp, char *filename)
(strcmp(filename, "<stdin>") == 0) ||
(strcmp(filename, "???") == 0);
}


#if defined(USE_STACKCHECK)
#if defined(WIN32) && defined(_MSC_VER)

/* Stack checking for Microsoft C */

#include <malloc.h>
#include <excpt.h>

int
PyOS_CheckStack()
{
__try {
/* _alloca throws a stack overflow exception if there's
not enough space left on the stack */
_alloca(PYOS_STACK_MARGIN * sizeof(void*));
return 0;
} __except (EXCEPTION_EXECUTE_HANDLER) {
/* just ignore all errors */
}
return 1;
}

#endif /* WIN32 && _MSC_VER */

/* Alternate implementations can be added here... */

#endif /* USE_STACKCHECK */

0 comments on commit 2f15b25

Please sign in to comment.