From bfa5400d3e166e1acc25dbe0b7f1fdf74b272568 Mon Sep 17 00:00:00 2001 From: jacob Date: Sun, 12 Oct 2003 13:16:39 +0000 Subject: [PATCH] Remove all the "assert(len>0)" which forbade zero-length writes across the from_backend() interface, after having made all implementations safe against being called with len==0 and possibly-NULL/undefined "data". (This includes making misc.c:bufchain_add() more robust in this area.) Assertion was originally added 2002-03-01; e.g., see plink.c:1.53 [r1571]. I believe this now shouldn't break anything. This should hopefully make `ppk-empty-comment' finally GO AWAY. (Tested with Unix PuTTY.) git-svn-id: svn://svn.tartarus.org/sgt/putty@3500 cda61777-01e9-0310-a592-d414129be87e --- misc.c | 2 ++ plink.c | 2 -- psftp.c | 7 +++---- scp.c | 7 +++---- terminal.c | 2 -- unix/uxplink.c | 2 -- 6 files changed, 8 insertions(+), 14 deletions(-) diff --git a/misc.c b/misc.c index 78d829a9..09e6db57 100644 --- a/misc.c +++ b/misc.c @@ -181,6 +181,8 @@ void bufchain_add(bufchain *ch, const void *data, int len) { const char *buf = (const char *)data; + if (len == 0) return; + ch->buffersize += len; if (ch->tail && ch->tail->buflen < BUFFER_GRANULE) { diff --git a/plink.c b/plink.c index 41a5001e..f0fe60cf 100644 --- a/plink.c +++ b/plink.c @@ -180,8 +180,6 @@ int from_backend(void *frontend_handle, int is_stderr, { 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 ca01f12a..c7cd8701 100644 --- a/psftp.c +++ b/psftp.c @@ -1639,14 +1639,13 @@ int from_backend(void *frontend, int is_stderr, const 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. */ if (is_stderr) { - fwrite(data, 1, len, stderr); + if (len > 0) + fwrite(data, 1, len, stderr); return 0; } @@ -1656,7 +1655,7 @@ int from_backend(void *frontend, int is_stderr, const char *data, int datalen) if (!outptr) return 0; - if (outlen > 0) { + if ((outlen > 0) && (len > 0)) { unsigned used = outlen; if (used > len) used = len; diff --git a/scp.c b/scp.c index de394840..70f13be9 100644 --- a/scp.c +++ b/scp.c @@ -178,14 +178,13 @@ int from_backend(void *frontend, int is_stderr, const 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. */ if (is_stderr) { - fwrite(data, 1, len, stderr); + if (len > 0) + fwrite(data, 1, len, stderr); return 0; } @@ -195,7 +194,7 @@ int from_backend(void *frontend, int is_stderr, const char *data, int datalen) if (!outptr) return 0; - if (outlen > 0) { + if ((outlen > 0) && (len > 0)) { unsigned used = outlen; if (used > len) used = len; diff --git a/terminal.c b/terminal.c index 5efe4842..1fa66e12 100644 --- a/terminal.c +++ b/terminal.c @@ -4792,8 +4792,6 @@ int term_ldisc(Terminal *term, int option) int term_data(Terminal *term, int is_stderr, const char *data, int len) { - assert(len > 0); - bufchain_add(&term->inbuf, data, len); if (!term->in_term_out) { diff --git a/unix/uxplink.c b/unix/uxplink.c index d069e045..087c2d87 100644 --- a/unix/uxplink.c +++ b/unix/uxplink.c @@ -170,8 +170,6 @@ int from_backend(void *frontend_handle, int is_stderr, { int osize, esize; - assert(len > 0); - if (is_stderr) { bufchain_add(&stderr_data, data, len); try_output(1); -- 2.11.0