Mercurial > cpython-lru_cache-weakref
diff Python/fileutils.c @ 65411:df0e348e7176
_Py_wrealpath() uses _Py_char2wchar() to decode the result, to support
surrogate characters.
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Sat, 16 Oct 2010 22:55:47 +0000 |
| parents | 6dcba93d6262 |
| children | 3794c9b50824 |
line wrap: on
line diff
--- a/Python/fileutils.c Sat Oct 16 22:52:09 2010 +0000 +++ b/Python/fileutils.c Sat Oct 16 22:55:47 2010 +0000 @@ -353,6 +353,7 @@ { char *cpath; char cresolved_path[PATH_MAX]; + wchar_t *wresolved_path; char *res; size_t r; cpath = _Py_wchar2char(path); @@ -364,11 +365,20 @@ PyMem_Free(cpath); if (res == NULL) return NULL; - r = mbstowcs(resolved_path, cresolved_path, resolved_path_size); - if (r == (size_t)-1 || r >= PATH_MAX) { + + wresolved_path = _Py_char2wchar(cresolved_path); + if (wresolved_path == NULL) { errno = EINVAL; return NULL; } + r = wcslen(wresolved_path); + if (resolved_path_size <= r) { + PyMem_Free(wresolved_path); + errno = EINVAL; + return NULL; + } + wcsncpy(resolved_path, wresolved_path, resolved_path_size); + PyMem_Free(wresolved_path); return resolved_path; } #endif
