Mercurial > cpython-lru_cache-weakref
diff Python/fileutils.c @ 73593:94a38ad4aebf
Catch PyUnicode_AS_UNICODE() errors in fileutils.c
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Thu, 17 Nov 2011 00:51:38 +0100 |
| parents | 76a1c5e88352 |
| children | 279b0aee0cfb |
line wrap: on
line diff
--- a/Python/fileutils.c Thu Nov 17 00:45:54 2011 +0100 +++ b/Python/fileutils.c Thu Nov 17 00:51:38 2011 +0100 @@ -244,8 +244,12 @@ #ifdef MS_WINDOWS int err; struct _stat wstatbuf; + wchar_t *wpath; - err = _wstat(PyUnicode_AS_UNICODE(path), &wstatbuf); + wpath = PyUnicode_AsUnicode(path); + if (wpath == NULL) + return -1; + err = _wstat(wpath, &wstatbuf); if (!err) statbuf->st_mode = wstatbuf.st_mode; return err; @@ -297,14 +301,19 @@ _Py_fopen(PyObject *path, const char *mode) { #ifdef MS_WINDOWS + wchar_t *wpath; wchar_t wmode[10]; int usize; + wpath = PyUnicode_AsUnicode(path); + if (wpath == NULL) + return NULL; + usize = MultiByteToWideChar(CP_ACP, 0, mode, -1, wmode, sizeof(wmode)); if (usize == 0) return NULL; - return _wfopen(PyUnicode_AS_UNICODE(path), wmode); + return _wfopen(wpath, wmode); #else FILE *f; PyObject *bytes = PyUnicode_EncodeFSDefault(path);
