1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

Fix a bug recently introduced in wgnutls_peek.

This commit is contained in:
Giuseppe Scrivano 2011-04-07 12:02:07 +02:00
parent 6dca252c60
commit d18b9749d9
2 changed files with 18 additions and 10 deletions

View 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>.

View 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 *