From 2b0c045b635e108602a614beb8bf8343c4d21102 Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 1 Mar 2002 13:17:45 +0000 Subject: [PATCH] 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 --- plink.c | 3 +++ psftp.c | 2 ++ rlogin.c | 3 ++- scp.c | 2 ++ terminal.c | 2 ++ 5 files changed, 11 insertions(+), 1 deletion(-) 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); /* -- 2.11.0