Upped the buffer size to 17000+ bytes to prepare for the upcoming test 1003
authorDaniel Stenberg <daniel@haxx.se>
Wed, 22 Aug 2007 13:57:49 +0000 (13:57 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 22 Aug 2007 13:57:49 +0000 (13:57 +0000)
that verfies ridiculously long server response lines. Also changed sprintf
to snprintf in a few places.

tests/server/sockfilt.c

index 9704eae..1c170c7 100644 (file)
@@ -175,8 +175,11 @@ static int juggle(curl_socket_t *sockfdp,
   ssize_t nread_socket;
   ssize_t bytes_written;
   ssize_t buffer_len;
-  unsigned char buffer[256]; /* FIX: bigger buffer */
-  char data[256];
+
+ /* 'buffer' is this excessively large only to be able to support things like
+    test 1003 which tests exceedingly large server response lines */
+  unsigned char buffer[17010];
+  char data[16];
 
   timeout.tv_sec = 120;
   timeout.tv_usec = 0;
@@ -280,7 +283,7 @@ static int juggle(curl_socket_t *sockfdp,
            Replies to PORT with "IPv[num]/[port]" */
         sprintf((char *)buffer, "IPv%d/%d\n", use_ipv6?6:4, (int)port);
         buffer_len = (ssize_t)strlen((char *)buffer);
-        sprintf(data, "PORT\n%04x\n", buffer_len);
+        snprintf(data, sizeof(data), "PORT\n%04x\n", buffer_len);
         write(fileno(stdout), data, 10);
         write(fileno(stdout), buffer, buffer_len);
       }
@@ -302,11 +305,23 @@ static int juggle(curl_socket_t *sockfdp,
                    (int)sizeof(buffer), buffer_len);
           return FALSE;
         }
-        nread_stdin = read(fileno(stdin), buffer, buffer_len);
-        if(nread_stdin != buffer_len)
-          return FALSE;
-
         logmsg("> %d bytes data, server => client", buffer_len);
+
+        /*
+         * To properly support huge data chunks, we need to repeat the call
+         * to read() until we're done or it fails.
+         */
+        nread_stdin = 0;
+        do {
+          /* get data in the buffer at the correct position */
+          ssize_t rc = read(fileno(stdin), &buffer[nread_stdin],
+                            buffer_len - nread_stdin);
+          logmsg("read %d bytes", rc);
+          if(rc <= 0)
+            return FALSE;
+          nread_stdin += rc;
+        } while (nread_stdin < buffer_len);
+
         lograw(buffer, buffer_len);
 
         if(*mode == PASSIVE_LISTEN) {
@@ -378,7 +393,7 @@ static int juggle(curl_socket_t *sockfdp,
       return TRUE;
     }
 
-    sprintf(data, "DATA\n%04x\n", nread_socket);
+    snprintf(data, sizeof(data), "DATA\n%04x\n", nread_socket);
     write(fileno(stdout), data, 10);
     write(fileno(stdout), buffer, nread_socket);