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);