> On Jan 14, 2019, at 7:23 AM, Peter Westlake <peter.westl...@pobox.com> wrote:
> 
> An SSCCE:
> 
> from twisted.internet import error
> from twisted.python import failure
> from twisted.conch.ssh.session import SSHSessionProcessProtocol
> from mock import MagicMock
> 
> err = error.ProcessTerminated(-1)
> fail = failure.Failure(err)
> session = MagicMock()
> proto = SSHSessionProcessProtocol(session)
> proto.processEnded(fail)
> 
> 
> That fails with:
> 
> Traceback (most recent call last):
>   File ".../negexit.py", line 10, in <module>
>     proto.processEnded(fail)
>   File "/usr/lib64/python2.7/site-packages/twisted/conch/ssh/session.py", 
> line 279, in processEnded
>     struct.pack('>L', err.exitCode))
> struct.error: integer out of range for 'L' format code
> 
> I'm running an SSH server on Windows, where negative exit codes can happen.
> 
> Passing negative numbers to a ">L" format was allowed in Python before 2.6, 
> where the number was treated as an unsigned int of the same bit pattern. It 
> was deprecated in 2.6, and became an error in 2.7. It's only just become a 
> problem for me because I'm updating a 10 year old SSH server that has been 
> running under 2.4 all this time.
> 
> Presumably the fix is to bit-mask the exitCode? I was able to work around the 
> error by doing that in a copy of _dumbwin32proc.py which was copied into the 
> project (historical reasons, don't ask) but it would be nice to have a proper 
> upstream fix. Not least because I want to purge the copied-in file, as you 
> can imagine.

This is a great bug!  Thanks for raising it.  Sounds like the fix is to simply 
reinterpret it as unsigned.  https://en.wikipedia.org/wiki/Exit_status#Windows: 
<https://en.wikipedia.org/wiki/Exit_status#Windows:>

>>> Windows uses 32-bit unsigned integers as exit codes,[11] although the 
>>> command interpreter treats them as signed.[12] If a process fails 
>>> initialization, a Windows system error code may be returned.[13][14]

Please do submit this fix upstream (file a ticket on Trac, open a PR, etc), it 
seems like one of the easier ones to integrate :-).

-g
_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to