From: Just van Rossum Date: Mon, 10 Feb 2003 09:22:01 +0000 (+0000) Subject: My previous checkin caused compile() to no longer accept buffers, as noted X-Git-Tag: v2.3c1~1946 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b9b8e9cf6d0d9b5d4d526f8cbd0601e284397753;p=python My previous checkin caused compile() to no longer accept buffers, as noted my MAL. Fixed. (Btw. eval() still doesn't take buffers, but that was so even before my patch.) --- diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 9b1bf55495..0b43905999 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)