[PATCH 1 of 4] win32: work around a WinError problem handling HRESULT types

Gregory Szorc gregory.szorc at gmail.com
Fri Jul 14 00:29:01 EDT 2017


On Thu, Jul 13, 2017 at 3:40 PM, Matt Harbison <mharbison72 at gmail.com>
wrote:

> # HG changeset patch
> # User Matt Harbison <matt_harbison at 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 queued part 1.

My eyes are glazing over the other parts. I'll try to review them tomorrow
if someone else doesn't get to them first.


>
> 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 at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20170713/8a273b42/attachment.html>


More information about the Mercurial-devel mailing list