Commit dec39716 authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

bpo-38322: Fix gotlandmark() of PC/getpathp.c (GH-16489)

Write the filename into a temporary buffer instead of reusing prefix.
The problem is that join() modifies prefix inplace. If prefix is not
normalized, join() can make prefix shorter and so gotlandmark()
does modify prefix instead of returning it unmodified.
parent 89f8177d
......@@ -315,15 +315,13 @@ canonicalize(wchar_t *buffer, const wchar_t *path)
'prefix' is null terminated in bounds. join() ensures
'landmark' can not overflow prefix if too long. */
static int
gotlandmark(wchar_t *prefix, const wchar_t *landmark)
gotlandmark(const wchar_t *prefix, const wchar_t *landmark)
{
int ok;
Py_ssize_t n = wcsnlen_s(prefix, MAXPATHLEN);
join(prefix, landmark);
ok = ismodule(prefix, FALSE);
prefix[n] = '\0';
return ok;
wchar_t filename[MAXPATHLEN+1];
memset(filename, 0, sizeof(filename));
wcscpy_s(filename, Py_ARRAY_LENGTH(filename), prefix);
join(filename, landmark);
return ismodule(filename, FALSE);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment