summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2010-10-07 11:06:49 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2010-10-07 11:06:49 (GMT)
commit7ae7c87b058137537bdc2b7f1d8e585aa0245c1c (patch)
treec23f7910cea32d9381d663c46c68123094601f71 /Python
parentafa88b5dac1b068ccc33b65cd4da400a290b137e (diff)
downloadcpython-7ae7c87b058137537bdc2b7f1d8e585aa0245c1c.zip
cpython-7ae7c87b058137537bdc2b7f1d8e585aa0245c1c.tar.gz
cpython-7ae7c87b058137537bdc2b7f1d8e585aa0245c1c.tar.bz2
_wrealpath() and _Py_wreadlink() support surrogates (PEP 383)
Use _Py_wchar2char() to support surrogate characters in the input path.
Diffstat (limited to 'Python')
-rw-r--r--Python/sysmodule.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 97809d2..e95a91f 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1661,16 +1661,17 @@ makeargvobject(int argc, wchar_t **argv)
static wchar_t*
_wrealpath(const wchar_t *path, wchar_t *resolved_path)
{
- char cpath[PATH_MAX];
+ char *cpath;
char cresolved_path[PATH_MAX];
char *res;
size_t r;
- r = wcstombs(cpath, path, PATH_MAX);
- if (r == (size_t)-1 || r >= PATH_MAX) {
+ cpath = _Py_wchar2char(path);
+ if (cpath == NULL) {
errno = EINVAL;
return NULL;
}
res = realpath(cpath, cresolved_path);
+ PyMem_Free(cpath);
if (res == NULL)
return NULL;
r = mbstowcs(resolved_path, cresolved_path, PATH_MAX);