From: Simon Tatham Date: Wed, 22 Feb 2017 21:57:04 +0000 (+0000) Subject: Windows handle sockets: fix error handling in sentdata(). X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=51732faeb913527f3373e3c77bf66ca414e5bab6;hp=86b604dd65679d983c06012b377e41c927da3cd6;p=PuTTY.git Windows handle sockets: fix error handling in sentdata(). In the sentdata callback function given to handle_output_new, the 'new_backlog' parameter can be negative, and if so, it represents a Windows error code and not a backlog size at all. handle_sentdata was not checking for this before passing it on to plug_sent. --- diff --git a/windows/winhsock.c b/windows/winhsock.c index 8acb82be..1a4ee4d7 100644 --- a/windows/winhsock.c +++ b/windows/winhsock.c @@ -94,7 +94,15 @@ static int handle_stderr(struct handle *h, void *data, int len) static void handle_sentdata(struct handle *h, int new_backlog) { Handle_Socket ps = (Handle_Socket) handle_get_privdata(h); - + + if (new_backlog < 0) { + /* Special case: this is actually reporting an error writing + * to the underlying handle, and our input value is the error + * code itself, negated. */ + plug_closing(ps->plug, win_strerror(-new_backlog), -new_backlog, 0); + return; + } + plug_sent(ps->plug, new_backlog); }