From: simon Date: Fri, 1 Mar 2002 13:17:45 +0000 (+0000) Subject: from_backend() should always be called with len > 0. Only rlogin X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/commitdiff_plain/2b0c045b635e108602a614beb8bf8343c4d21102 from_backend() should always be called with len > 0. Only rlogin mode ever failed to do this, and only Plink actually had a problem with it, so this didn't become obvious for a while. rlogin mode is fixed, and all implementations of from_backend() now contain an assertion so that we should spot errors of this type more quickly in future. git-svn-id: svn://svn.tartarus.org/sgt/putty@1571 cda61777-01e9-0310-a592-d414129be87e --- 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); /*