Mercurial > cpython-lru_cache-weakref
diff Python/bltinmodule.c @ 51956:8fe2988cf550
ignore the coding cookie in compile(), exec(), and eval() if the source is a string #4626
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Mon, 02 Mar 2009 23:31:26 +0000 |
| parents | debd14c489b9 |
| children | 261f594014c6 |
line wrap: on
line diff
--- a/Python/bltinmodule.c Mon Mar 02 23:06:00 2009 +0000 +++ b/Python/bltinmodule.c Mon Mar 02 23:31:26 2009 +0000 @@ -494,12 +494,13 @@ static char * -source_as_string(PyObject *cmd, char *funcname, char *what) +source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf) { char *str; Py_ssize_t size; if (PyUnicode_Check(cmd)) { + cf->cf_flags |= PyCF_IGNORE_COOKIE; cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL); if (cmd == NULL) return NULL; @@ -591,7 +592,7 @@ return result; } - str = source_as_string(cmd, "compile", "string, bytes, AST or code"); + str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf); if (str == NULL) return NULL; @@ -703,14 +704,14 @@ return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals); } - str = source_as_string(cmd, "eval", "string, bytes or code"); + cf.cf_flags = PyCF_SOURCE_IS_UTF8; + str = source_as_string(cmd, "eval", "string, bytes or code", &cf); if (str == NULL) return NULL; while (*str == ' ' || *str == '\t') str++; - cf.cf_flags = PyCF_SOURCE_IS_UTF8; (void)PyEval_MergeCompilerFlags(&cf); result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf); Py_XDECREF(tmp); @@ -779,12 +780,13 @@ v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals); } else { - char *str = source_as_string(prog, "exec", - "string, bytes or code"); + char *str; PyCompilerFlags cf; + cf.cf_flags = PyCF_SOURCE_IS_UTF8; + str = source_as_string(prog, "exec", + "string, bytes or code", &cf); if (str == NULL) return NULL; - cf.cf_flags = PyCF_SOURCE_IS_UTF8; if (PyEval_MergeCompilerFlags(&cf)) v = PyRun_StringFlags(str, Py_file_input, globals, locals, &cf);
