From: Raymond Hettinger Date: Mon, 21 Feb 2005 20:03:14 +0000 (+0000) Subject: Document how the pattern recognizer keeps all of its references in bounds. X-Git-Tag: v2.5a0~2002 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=07359a7fed6236537e45a7f381560193274956bd;p=thirdparty%2FPython%2Fcpython.git Document how the pattern recognizer keeps all of its references in bounds. Add a test in case the underlying assumptions ever change (i.e. the compiler starts generating code blocks that are not punctuated by RETURN_VALUE). --- diff --git a/Python/compile.c b/Python/compile.c index b458f7319a60..6e68d0fd5da6 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -677,6 +677,14 @@ optimize_code(PyObject *code, PyObject* consts, PyObject *names, PyObject *linen goto exitUnchanged; codestr = memcpy(codestr, PyString_AS_STRING(code), codelen); + /* Verify that RETURN_VALUE terminates the codestring. This allows + the various transformation patterns to look ahead several + instructions without additional checks to make sure they are not + looking beyond the end of the code string. + */ + if (codestr[codelen-1] != RETURN_VALUE) + goto exitUnchanged; + /* Mapping to new jump targets after NOPs are removed */ addrmap = PyMem_Malloc(codelen * sizeof(int)); if (addrmap == NULL)