[2.7] bpo-32903: Fix a memory leak in os.chdir() on Windows (GH-5801). (#5947)

(cherry picked from commit 3e197c7a67)

Co-authored-by: Alexey Izbyshev <izbyshev@users.noreply.github.com>
This commit is contained in:
Alexey Izbyshev 2018-03-01 13:27:34 +03:00 committed by Xiang Zhang
parent c20c97f612
commit aa40f92240
2 changed files with 10 additions and 7 deletions

View File

@ -0,0 +1,2 @@
Fix a memory leak in os.chdir() on Windows if the current directory is set
to a UNC path.

View File

@ -984,6 +984,7 @@ win32_wchdir(LPCWSTR path)
wchar_t _new_path[MAX_PATH+1], *new_path = _new_path;
int result;
wchar_t env[4] = L"=x:";
int is_unc_like_path;
if(!SetCurrentDirectoryW(path))
return FALSE;
@ -1002,15 +1003,15 @@ win32_wchdir(LPCWSTR path)
return FALSE;
}
}
if (wcsncmp(new_path, L"\\\\", 2) == 0 ||
wcsncmp(new_path, L"//", 2) == 0)
/* UNC path, nothing to do. */
return TRUE;
env[1] = new_path[0];
result = SetEnvironmentVariableW(env, new_path);
is_unc_like_path = (wcsncmp(new_path, L"\\\\", 2) == 0 ||
wcsncmp(new_path, L"//", 2) == 0);
if (!is_unc_like_path) {
env[1] = new_path[0];
result = SetEnvironmentVariableW(env, new_path);
}
if (new_path != _new_path)
free(new_path);
return result;
return result ? TRUE : FALSE;
}
#endif