# HG changeset patch # User Matt Harbison <matt_harbi...@yahoo.com> # Date 1490848380 14400 # Thu Mar 30 00:33:00 2017 -0400 # Node ID 34ade5bfcf96b840ee3643d2429f44865b977749 # Parent 26e4ba058215e536d3827befbea99ff6203d35f8 win32: work around a WinError problem handling HRESULT types
I ran into this ctypes bug while working with the Crypto API. While this could be an issue with any Win32 API in theory, the handful of things that we call are older functions that are unlikely to return COM errors, so I didn't retrofit this everywhere. diff --git a/mercurial/win32.py b/mercurial/win32.py --- a/mercurial/win32.py +++ b/mercurial/win32.py @@ -212,7 +212,12 @@ except AttributeError: _kernel32.PeekNamedPipe.restype = _BOOL def _raiseoserror(name): - err = ctypes.WinError() + # Force the code to a signed int to avoid an 'int too large' error. + # See https://bugs.python.org/issue28474 + code = _kernel32.GetLastError() + if code > 0x7fffffff: + code -= 2**32 + err = ctypes.WinError(code=code) raise OSError(err.errno, '%s: %s' % (name, err.strerror)) def _getfileinfo(name): _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel