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
msvcrt.locking crashes python #73578
Comments
On 3.5.2 and 3.5.3, but not 3.4.3 or 2.7.10 (Windows 64-bit), the third line causes Python to crash with exit code 0xC0000417. import msvcrt
fp = open('file.txt', 'w')
msvcrt.locking(fp.fileno(), msvcrt.LK_NBLCK, -1)
print('End') I came across this in the portalocker module. I don't think -1 is a valid third argument, but it doesn't raise an exception on Python 3.4 or 2.7. |
I ran it on AppVeyor to double check, the crash appears from 3.5 onwards as I saw on my computer. |
The old CRT doesn't do any parameter validation on the nbytes parameter. It just passes it directly to Windows LockFile as follows:
which is locking (DWORD)-1 bytes, i.e. 0xFFFFFFFF. This allows users to sneakily lock more than 2 GiB by passing a negative value. Python could do its own validation in 2.7 to raise an exception for negative values, but I think it's too late; that ship has sailed. The parameter is validated by the new CRT in 3.5+, which limits nbytes to non-negative values. There we need the _Py_BEGIN_SUPPRESS_IPH and _Py_END_SUPPRESS_IPH macros to handle the failed call without crashing the process. |
New changeset f48bdcd02b57 by Steve Dower in branch '3.5': New changeset 15bbb18d87fd by Steve Dower in branch '3.6': New changeset fb6a48fa8da3 by Steve Dower in branch 'default': |
New changeset cb0c9718f7bd13df67b0d7df88b6f5b197ef05a7 by Steve Dower in branch 'master': New changeset ed8b523b9f6495806a38262ca9d1676bf7d5e830 by Steve Dower in branch 'master': New changeset 01c3bdbb25068e7558ff8f275d0ed22c9f4e6b32 by Steve Dower in branch 'master': |
New changeset ed8b523b9f6495806a38262ca9d1676bf7d5e830 by Steve Dower in branch '3.6': New changeset cb0c9718f7bd13df67b0d7df88b6f5b197ef05a7 by Steve Dower in branch '3.6': |
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: