@@ -494,12 +494,13 @@ PyDoc_STR(
494494
495495
496496static char *
497- source_as_string (PyObject * cmd , char * funcname , char * what )
497+ source_as_string (PyObject * cmd , char * funcname , char * what , PyCompilerFlags * cf )
498498{
499499 char * str ;
500500 Py_ssize_t size ;
501501
502502 if (PyUnicode_Check (cmd )) {
503+ cf -> cf_flags |= PyCF_IGNORE_COOKIE ;
503504 cmd = _PyUnicode_AsDefaultEncodedString (cmd , NULL );
504505 if (cmd == NULL )
505506 return NULL ;
@@ -591,7 +592,7 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
591592 return result ;
592593 }
593594
594- str = source_as_string (cmd , "compile" , "string, bytes, AST or code" );
595+ str = source_as_string (cmd , "compile" , "string, bytes, AST or code" , & cf );
595596 if (str == NULL )
596597 return NULL ;
597598
@@ -703,14 +704,14 @@ builtin_eval(PyObject *self, PyObject *args)
703704 return PyEval_EvalCode ((PyCodeObject * ) cmd , globals , locals );
704705 }
705706
706- str = source_as_string (cmd , "eval" , "string, bytes or code" );
707+ cf .cf_flags = PyCF_SOURCE_IS_UTF8 ;
708+ str = source_as_string (cmd , "eval" , "string, bytes or code" , & cf );
707709 if (str == NULL )
708710 return NULL ;
709711
710712 while (* str == ' ' || * str == '\t' )
711713 str ++ ;
712714
713- cf .cf_flags = PyCF_SOURCE_IS_UTF8 ;
714715 (void )PyEval_MergeCompilerFlags (& cf );
715716 result = PyRun_StringFlags (str , Py_eval_input , globals , locals , & cf );
716717 Py_XDECREF (tmp );
@@ -779,12 +780,13 @@ builtin_exec(PyObject *self, PyObject *args)
779780 v = PyEval_EvalCode ((PyCodeObject * ) prog , globals , locals );
780781 }
781782 else {
782- char * str = source_as_string (prog , "exec" ,
783- "string, bytes or code" );
783+ char * str ;
784784 PyCompilerFlags cf ;
785+ cf .cf_flags = PyCF_SOURCE_IS_UTF8 ;
786+ str = source_as_string (prog , "exec" ,
787+ "string, bytes or code" , & cf );
785788 if (str == NULL )
786789 return NULL ;
787- cf .cf_flags = PyCF_SOURCE_IS_UTF8 ;
788790 if (PyEval_MergeCompilerFlags (& cf ))
789791 v = PyRun_StringFlags (str , Py_file_input , globals ,
790792 locals , & cf );
0 commit comments