[Twisted-Python] Negative error code breaks twisted.conch
![](https://secure.gravatar.com/avatar/e0114f22fcde3deed8ebe94c70652140.jpg?s=120&d=mm&r=g)
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. Peter.
![](https://secure.gravatar.com/avatar/e1554622707bedd9202884900430b838.jpg?s=120&d=mm&r=g)
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
![](https://secure.gravatar.com/avatar/e0114f22fcde3deed8ebe94c70652140.jpg?s=120&d=mm&r=g)
Thank you! Filed: https://twistedmatrix.com/trac/ticket/9573 I'll go off and read about submitting a fix now. Peter. On Tue, 15 Jan 2019, at 07:41, Glyph wrote:
![](https://secure.gravatar.com/avatar/e1554622707bedd9202884900430b838.jpg?s=120&d=mm&r=g)
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
![](https://secure.gravatar.com/avatar/e0114f22fcde3deed8ebe94c70652140.jpg?s=120&d=mm&r=g)
Thank you! Filed: https://twistedmatrix.com/trac/ticket/9573 I'll go off and read about submitting a fix now. Peter. On Tue, 15 Jan 2019, at 07:41, Glyph wrote:
participants (2)
-
Glyph
-
Peter Westlake