]> sjero.net Git - wget/commitdiff
[svn] Don't pad shrunk POST'ed files.
authorhniksic <devnull@localhost>
Mon, 15 Sep 2003 22:09:17 +0000 (15:09 -0700)
committerhniksic <devnull@localhost>
Mon, 15 Sep 2003 22:09:17 +0000 (15:09 -0700)
Message-ID: <m3u17dn1qk.fsf@hniksic.iskon.hr>

src/ChangeLog
src/http.c

index 4b7b79e4e647086c8957452c22956a3c663b855c..1c3c59e20b96eae486d41b7e84289738d33d19ad 100644 (file)
@@ -1,3 +1,8 @@
+2003-09-16  Hrvoje Niksic  <hniksic@xemacs.org>
+
+       * http.c (post_file): Don't pad the file if it's not large
+       enough.  Bail out instead.
+
 2003-09-15  Hrvoje Niksic  <hniksic@xemacs.org>
 
        * retr.c (get_contents): Reduce the buffer size to the amount of
index abaa4bdb34e3f31ddb344e0a8f234c07a46462c0..62ab5c37222c893dbd7d413d4910277fd45b7e49 100644 (file)
@@ -185,8 +185,7 @@ parse_http_status_line (const char *line, const char **reason_phrase_ptr)
 
 /* Send the contents of FILE_NAME to SOCK/SSL.  Make sure that exactly
    PROMISED_SIZE bytes are sent over the wire -- if the file is
-   longer, read only that much; if the file is shorter, pad it with
-   zeros.  */
+   longer, read only that much; if the file is shorter, report an error.  */
 
 static int
 post_file (int sock, void *ssl, const char *file_name, long promised_size)
@@ -204,8 +203,8 @@ post_file (int sock, void *ssl, const char *file_name, long promised_size)
 
   fp = fopen (file_name, "rb");
   if (!fp)
-    goto pad;
-  while (written < promised_size)
+    return -1;
+  while (!feof (fp) && written < promised_size)
     {
       int towrite;
       int length = fread (chunk, 1, sizeof (chunk), fp);
@@ -227,29 +226,14 @@ post_file (int sock, void *ssl, const char *file_name, long promised_size)
     }
   fclose (fp);
 
- pad:
+  /* If we've written less than was promised, report a (probably
+     nonsensical) error rather than break the promise.  */
   if (written < promised_size)
     {
-      /* This highly unlikely case can happen only if the file has
-        shrunk under us.  To uphold the promise that exactly
-        promised_size bytes would be delivered, pad the remaining
-        data with zeros.  #### Should we abort instead?  */
-      DEBUGP (("padding %ld bytes ... ", promised_size - written));
-      memset (chunk, '\0', sizeof (chunk));
-      while (written < promised_size)
-       {
-         int towrite = WMIN (promised_size - written, sizeof (chunk));
-#ifdef HAVE_SSL
-         if (ssl)
-           write_error = ssl_iwrite (ssl, chunk, towrite);
-         else
-#endif
-           write_error = iwrite (sock, chunk, towrite);
-         if (write_error < 0)
-           return -1;
-         written += towrite;
-       }
+      errno = EINVAL;
+      return -1;
     }
+
   assert (written == promised_size);
   DEBUGP (("done]\n"));
   return 0;