Mercurial > hg
changeset 35550:ed30934165c9
win32: do not call GetVolumePathName() with the minimum buffer length
It fails on Windows XP even though the doc says "a safer but slower way to
set the size of the return buffer is to call the GetFullPathName function,
and then make sure that the buffer size is at least the same size as the full
path that GetFullPathName returns."
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364996(v=vs.85).aspx
Well, more "safe" way would be to simply rely on MAX_PATH for common scenarios.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 02 Jan 2018 12:14:08 +0900 |
parents | 94a127152e25 |
children | fa9dd53eb23e |
files | mercurial/win32.py |
diffstat | 1 files changed, 3 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/win32.py Tue Jan 02 12:02:25 2018 +0900 +++ b/mercurial/win32.py Tue Jan 02 12:14:08 2018 +0900 @@ -439,7 +439,9 @@ # realpath() calls GetFullPathName() realpath = os.path.realpath(path) - size = len(realpath) + 1 + # allocate at least MAX_PATH long since GetVolumePathName('c:\\', buf, 4) + # somehow fails on Windows XP + size = max(len(realpath), _MAX_PATH) + 1 buf = ctypes.create_string_buffer(size) if not _kernel32.GetVolumePathNameA(realpath, ctypes.byref(buf), size):