diff --git a/plink.c b/plink.c index b7a2fd4b..b2c07acc 100644 --- a/plink.c +++ b/plink.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #define PUTTY_DO_GLOBALS /* actually _define_ globals */ @@ -147,6 +148,8 @@ int from_backend(int is_stderr, char *data, int len) HANDLE h = (is_stderr ? errhandle : outhandle); int osize, esize; + assert(len > 0); + if (is_stderr) { bufchain_add(&stderr_data, data, len); try_output(1); diff --git a/psftp.c b/psftp.c index ead86140..094e68b0 100644 --- a/psftp.c +++ b/psftp.c @@ -1512,6 +1512,8 @@ int from_backend(int is_stderr, char *data, int datalen) unsigned char *p = (unsigned char *) data; unsigned len = (unsigned) datalen; + assert(len > 0); + /* * stderr data is just spouted to local stderr and otherwise * ignored. diff --git a/rlogin.c b/rlogin.c index ba7dd37b..a80d12e3 100644 --- a/rlogin.c +++ b/rlogin.c @@ -68,7 +68,8 @@ static int rlogin_receive(Plug plug, int urgent, char *data, int len) } firstbyte = 0; } - c_write(data, len); + if (len > 0) + c_write(data, len); } return 1; } diff --git a/scp.c b/scp.c index 60ca11cb..34f6ffb5 100644 --- a/scp.c +++ b/scp.c @@ -268,6 +268,8 @@ int from_backend(int is_stderr, char *data, int datalen) unsigned char *p = (unsigned char *) data; unsigned len = (unsigned) datalen; + assert(len > 0); + /* * stderr data is just spouted to local stderr and otherwise * ignored. diff --git a/terminal.c b/terminal.c index 1c817dac..d76d7349 100644 --- a/terminal.c +++ b/terminal.c @@ -3603,6 +3603,8 @@ int term_ldisc(int option) */ int from_backend(int is_stderr, char *data, int len) { + assert(len > 0); + bufchain_add(&inbuf, data, len); /*