diff options
Diffstat (limited to 'Python/bltinmodule.c')
-rw-r--r-- | Python/bltinmodule.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 9b1bf55..0b43905 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -18,6 +18,8 @@ */ #if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T) const char *Py_FileSystemDefaultEncoding = "mbcs"; +#elif defined(__APPLE__) +const char *Py_FileSystemDefaultEncoding = "utf-8"; #else const char *Py_FileSystemDefaultEncoding = NULL; /* use default */ #endif @@ -341,6 +343,7 @@ builtin_compile(PyObject *self, PyObject *args) int supplied_flags = 0; PyCompilerFlags cf; PyObject *result, *cmd, *tmp = NULL; + int length; if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename, &startstr, &supplied_flags, &dont_inherit)) @@ -357,15 +360,14 @@ builtin_compile(PyObject *self, PyObject *args) cf.cf_flags |= PyCF_SOURCE_IS_UTF8; } #endif - if (!PyString_Check(cmd)) { + if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length)) + return NULL; + if (length != strlen(str)) { PyErr_SetString(PyExc_TypeError, - "compile() arg 1 must be a string"); + "expected string without null bytes"); return NULL; } - if (PyString_AsStringAndSize(cmd, &str, NULL)) - return NULL; - if (strcmp(startstr, "exec") == 0) start = Py_file_input; else if (strcmp(startstr, "eval") == 0) |