]> sjero.net Git - wget/commitdiff
Fix a bug recently introduced in wgnutls_peek.
authorGiuseppe Scrivano <gscrivano@gnu.org>
Thu, 7 Apr 2011 10:02:07 +0000 (12:02 +0200)
committerGiuseppe Scrivano <gscrivano@gnu.org>
Thu, 7 Apr 2011 10:02:07 +0000 (12:02 +0200)
src/ChangeLog
src/gnutls.c

index 001b62e2f1edfaa536bc0a96f4adf9dea4121d10..fb42a5441d5c8916bab94da9411f17aba95de31b 100644 (file)
@@ -1,3 +1,9 @@
+2011-04-07  Giuseppe Scrivano  <gscrivano@gnu.org>
+
+       * gnutls.c (wgnutls_peek): New local variable `read'.
+       Use `read' instead of `ret' to store the number of read bytes.
+       Reported by: Ray Satiro <raysatiro@yahoo.com>
+
 2011-04-04  Giuseppe Scrivano  <gscrivano@gnu.org>
 
        * openssl.c [WINDOWS]: Include <w32sock.h>.
index 2e5f89a781888f68af3362562a4539e81263cfa0..1d6316298a6af8fff815ff5aeaa17f9acebef8d6 100644 (file)
@@ -173,7 +173,7 @@ wgnutls_poll (int fd, double timeout, int wait_for, void *arg)
 static int
 wgnutls_peek (int fd, char *buf, int bufsize, void *arg)
 {
-  int ret = 0;
+  int ret = 0, read = 0;
   struct wgnutls_transport_context *ctx = arg;
   int offset = MIN (bufsize, ctx->peeklen);
   if (bufsize > sizeof ctx->peekbuf)
@@ -203,27 +203,29 @@ wgnutls_peek (int fd, char *buf, int bufsize, void *arg)
       do
         {
           ret = gnutls_record_recv (ctx->session, buf + offset,
-                                    bufsize - offset);
+                                     bufsize - offset);
         }
       while (ret == GNUTLS_E_INTERRUPTED);
 
-      if (ret < 0)
+      read = ret;
+
+      if (read < 0)
         {
           if (offset)
-            ret = 0;
+            read = 0;
           else
-            return ret;
+            return read;
         }
 
-      if (ret > 0)
+      if (read > 0)
         {
           memcpy (ctx->peekbuf + offset, buf + offset,
-                  ret);
-          ctx->peeklen += ret;
+                  read);
+          ctx->peeklen += read;
         }
 
 #ifdef F_GETFL
-      fcntl (fd, F_SETFL, flags);
+      ret = fcntl (fd, F_SETFL, flags);
       if (ret < 0)
         return ret;
 #else
@@ -234,7 +236,7 @@ wgnutls_peek (int fd, char *buf, int bufsize, void *arg)
 #endif
     }
 
-  return offset + ret;
+  return offset + read;
 }
 
 static const char *