bpo-41056: Fix reference to deallocated stack in pathconfig (Coverity) (GH-21013)

Reported by Coverity.  (CID 1457554 RETURN_LOCAL)

path0 is assigned as a pointer to this right before it goes out of scope.
This commit is contained in:
Gregory P. Smith 2020-06-22 00:27:20 -07:00 committed by GitHub
parent 6f79838fc1
commit 81328f3070
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 2 additions and 1 deletions

View File

@ -0,0 +1 @@
Fixes a reference to deallocated stack space during startup when constructing sys.path involving a relative symlink when code was supplied via -c. (discovered via Coverity)

View File

@ -686,6 +686,7 @@ _PyPathConfig_ComputeSysPath0(const PyWideStringList *argv, PyObject **path0_p)
#ifdef HAVE_READLINK #ifdef HAVE_READLINK
wchar_t link[MAXPATHLEN + 1]; wchar_t link[MAXPATHLEN + 1];
int nr = 0; int nr = 0;
wchar_t path0copy[2 * MAXPATHLEN + 1];
if (have_script_arg) { if (have_script_arg) {
nr = _Py_wreadlink(path0, link, Py_ARRAY_LENGTH(link)); nr = _Py_wreadlink(path0, link, Py_ARRAY_LENGTH(link));
@ -708,7 +709,6 @@ _PyPathConfig_ComputeSysPath0(const PyWideStringList *argv, PyObject **path0_p)
} }
else { else {
/* Must make a copy, path0copy has room for 2 * MAXPATHLEN */ /* Must make a copy, path0copy has room for 2 * MAXPATHLEN */
wchar_t path0copy[2 * MAXPATHLEN + 1];
wcsncpy(path0copy, path0, MAXPATHLEN); wcsncpy(path0copy, path0, MAXPATHLEN);
q = wcsrchr(path0copy, SEP); q = wcsrchr(path0copy, SEP);
wcsncpy(q+1, link, MAXPATHLEN); wcsncpy(q+1, link, MAXPATHLEN);