mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
gnutls: Fix a problem with multiple peek read calls.
This commit is contained in:
parent
05503232c0
commit
75c6ca0f5d
@ -1,3 +1,8 @@
|
|||||||
|
2010-07-29 Giuseppe Scrivano <gscrivano@gnu.org>
|
||||||
|
|
||||||
|
* gnutls.c (wgnutls_peek): Don't read more data if the buffered peek
|
||||||
|
data is sufficient.
|
||||||
|
|
||||||
2010-07-28 Giuseppe Scrivano <gscrivano@gnu.org>
|
2010-07-28 Giuseppe Scrivano <gscrivano@gnu.org>
|
||||||
|
|
||||||
* http.h (http_loop): Add new argument `original_url'
|
* http.h (http_loop): Add new argument `original_url'
|
||||||
|
33
src/gnutls.c
33
src/gnutls.c
@ -173,28 +173,33 @@ wgnutls_peek (int fd, char *buf, int bufsize, void *arg)
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
struct wgnutls_transport_context *ctx = arg;
|
struct wgnutls_transport_context *ctx = arg;
|
||||||
int offset = ctx->peeklen;
|
int offset = MIN (bufsize, ctx->peeklen);
|
||||||
|
|
||||||
if (bufsize > sizeof ctx->peekbuf)
|
if (bufsize > sizeof ctx->peekbuf)
|
||||||
bufsize = sizeof ctx->peekbuf;
|
bufsize = sizeof ctx->peekbuf;
|
||||||
|
|
||||||
if (offset)
|
if (ctx->peeklen)
|
||||||
memcpy (buf, ctx->peekbuf, offset);
|
memcpy (buf, ctx->peekbuf, offset);
|
||||||
|
|
||||||
do
|
if (bufsize > offset)
|
||||||
{
|
{
|
||||||
if (gnutls_record_check_pending (ctx->session)
|
do
|
||||||
|| select_fd (fd, 0, WAIT_FOR_READ))
|
{
|
||||||
ret = gnutls_record_recv (ctx->session, buf + offset, bufsize - offset);
|
if (gnutls_record_check_pending (ctx->session)
|
||||||
}
|
|| select_fd (fd, 0, WAIT_FOR_READ))
|
||||||
while (ret == GNUTLS_E_INTERRUPTED);
|
ret = gnutls_record_recv (ctx->session, buf + offset,
|
||||||
|
bufsize - offset);
|
||||||
|
}
|
||||||
|
while (ret == GNUTLS_E_INTERRUPTED);
|
||||||
|
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
{
|
{
|
||||||
memcpy (ctx->peekbuf + offset, buf + offset, ret);
|
memcpy (ctx->peekbuf + offset, buf + offset,
|
||||||
ctx->peeklen += ret;
|
ret);
|
||||||
|
ctx->peeklen += ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ctx->peeklen;
|
|
||||||
|
return offset + ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
|
Loading…
Reference in New Issue
Block a user