Fix a logic bug in SSL read looping (Bug #130078)

GETADDRINFO
Stephane Bortzmeyer 24 years ago
parent eb5d96cea1
commit ec61cd8ff2

@ -810,6 +810,12 @@ main (argc, argv)
printf ("%d bytes read from server.\n", nr);
}
/* That's all, folks */
if (http) {
if (ssl)
SSL_shutdown (channel.ssl);
else
fclose (channel.fs);
}
close (sockfd);
(void) gettimeofday (&newtv, (struct timezone *) NULL);

@ -134,6 +134,7 @@ read_from_server (CHANNEL fs, short ssl)
else
nr = SSL_readline (fs.ssl, big_recvline, MAXTOREAD, FALSE);
#endif
/* printf ("DEBUG: reading body \"%s\"\n (%d chars)\n", big_recvline, nr); */
if ((nr < 2) && (errno == EINTR)) /* Probably a timeout */
return -1;
if (nr < 2) /* Hmm, if the body is empty, we'll

@ -65,6 +65,7 @@ SSL_readline (sslh, ptr, maxlen, ln)
unsigned short ln;
{
int rc = 0;
int n = 0;
int i, oi;
if (ln)
{
@ -93,23 +94,27 @@ SSL_readline (sslh, ptr, maxlen, ln)
}
else
{
/* Since OpenSSL reads at most 4096 characters, we should loop
here like we do in non-SSSL readline */
if ((buf_end == 0) || (buf_ptr == buf_end))
{
rc = SSL_read (sslh, ptr, maxlen);
buf_end = 0;
buf_ptr = 0;
}
else
{
for (i = buf_ptr; i < maxlen && i <= buf_end; i++)
{
*ptr++ = SSL_buffer[i];
rc++;
}
}
return rc;
/* OpenSSL reads at most 4096 characters */
rc = 1; /* Just to avoid exiting too soon */
while (n < maxlen && rc != 0) {
if ((buf_end == 0) || (buf_ptr > buf_end))
{
rc = SSL_read (sslh, ptr, maxlen);
buf_end = 0;
buf_ptr = 0;
}
else
{
for (i = buf_ptr; i < maxlen && i <= buf_end; i++)
{
*ptr++ = SSL_buffer[i];
rc++;
}
buf_ptr = i;
}
n = n + rc;
}
return n;
}
}
#endif

Loading…
Cancel
Save