New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
os.stat() fails on bytes paths under Windows 7 #54117
Comments
Under Windows 7, there is another path in posixmodule.c for stat() (because of the link dereferencing feature, it seems). This path fails for the bytes version. It turns out that GetFinalPathNameByHandleA returns a value which is one byte too small (while GetFinalPathNameByHandleW returns the expected value). The MSDN doc (*) seems to mention it although with a strange wording:
(*) http://msdn.microsoft.com/en-us/library/aa364962%28VS.85%29.aspx The net result is that, when we give 'buf_size+1' to the second GetFinalPathNameByHandleA() call after 'buf_size' was returned by the first call, the buffer is still not big enough and it doesn't get filled. The subsequent call to win32_lstat() is done with a bogus path and fails with "[Error 2]: the system cannot find the file specified". Here is a patch fixing this and also harmonizing win32_stat() and win32_stat_w(). I've added a test, although additional tests for bytes symlinks would probably be deserved. Please review. PS: the context is: |
The bug appears to really be limited to Vista?/W7. On WinXP,
>>> os.path.exists('c:/programs/python31')
True
>>> os.path.exists(b'c:/programs/python31')
True
Has the patch been tested on WinXP to be sure it does not introduce a bug for this? |
No. Can you? |
Only if given a revised 32bit binary (and revised test_os.py). I expect someone else who can will see this. |
The patch looks ok to me. I tested it on Server 2003 (same as XP) and it worked fine in addition to Windows 7. |
Ok, I committed the patch in r84956. Thank you for testing. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: