]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Remove all the "assert(len>0)" which forbade zero-length writes across the
authorJacob Nevins <jacobn@chiark.greenend.org.uk>
Sun, 12 Oct 2003 13:16:39 +0000 (13:16 +0000)
committerJacob Nevins <jacobn@chiark.greenend.org.uk>
Sun, 12 Oct 2003 13:16:39 +0000 (13:16 +0000)
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.)

[originally from svn r3500]
[r1571 == fdbd6978016e9fd87db7b3bfc33ff0da8bd3eea9]

misc.c
plink.c
psftp.c
scp.c
terminal.c
unix/uxplink.c

diff --git a/misc.c b/misc.c
index 78d829a9b4ecfb8cafdbc648e73d12fd499ef9c9..09e6db5717727828b5c9cfd517e59b7bafe942ca 100644 (file)
--- 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 41a5001e1b8f8b71eca8bbdcfd78f4df2044de40..f0fe60cf9d6d06967e170cefe71d031d8eb031f2 100644 (file)
--- 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 ca01f12a6688c1ea7d11b7f749e82efe0daa59a7..c7cd8701a869a3fa8af54bd7690147a221122bd8 100644 (file)
--- 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 de394840ad77715962caa3f6f9332b29ceb310a4..70f13be97e1fd217fead35f6f6c802b3bd73b256 100644 (file)
--- 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;
index 5efe484225dcc3560a72adc12e4f42ecc38e382a..1fa66e12734b0f8466a8e4dd60d78ab3470d3226 100644 (file)
@@ -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) {
index d069e04557d1144f278e6f792b0290eeb29bee7c..087c2d876f42b08f830a7d59ea47cb172d690c15 100644 (file)
@@ -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);