mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
- Made the SOCKS code use the new Curl_read_plain() function to fix the bug
Markus Moeller reported: http://curl.haxx.se/mail/archive-2008-09/0016.html - recv() errors other than those equal to EAGAIN now cause proper CURLE_RECV_ERROR to get returned. This made test case 160 fail so I've now disabled it until we can figure out another way to exercise that logic.
This commit is contained in:
parent
eff2c3a621
commit
391e8afd1f
7
CHANGES
7
CHANGES
@ -7,6 +7,13 @@
|
||||
Changelog
|
||||
|
||||
Daniel Stenberg (22 Sep 2008)
|
||||
- Made the SOCKS code use the new Curl_read_plain() function to fix the bug
|
||||
Markus Moeller reported: http://curl.haxx.se/mail/archive-2008-09/0016.html
|
||||
|
||||
- recv() errors other than those equal to EAGAIN now cause proper
|
||||
CURLE_RECV_ERROR to get returned. This made test case 160 fail so I've now
|
||||
disabled it until we can figure out another way to exercise that logic.
|
||||
|
||||
- Michael Goffioul filed bug report #2107377 "Problem with mutli + GnuTLS +
|
||||
proxy" (http://curl.haxx.se/bug/view.cgi?id=2107377) that showed how a multi
|
||||
interface using program didn't work when built with GnuTLS and a CONNECT
|
||||
|
@ -23,6 +23,8 @@ This release includes the following bugfixes:
|
||||
o HTTP pipelining over proxy
|
||||
o fix regression in configure script which affected OpenSSL builds on MSYS
|
||||
o GnuTLS-based multi interface doing HTTPS over proxy failed
|
||||
o recv() failures cause CURLE_RECV_ERROR
|
||||
o SFTP over SOCKS crash fixed
|
||||
|
||||
This release includes the following known bugs:
|
||||
|
||||
@ -37,6 +39,6 @@ advice from friends like these:
|
||||
|
||||
Keith Mok, Yang Tse, Daniel Fandrich, Guenter Knauf, Dmitriy Sergeyev,
|
||||
Linus Nielsen Feltzing, Martin Drasar, Stefan Krause, Dmitry Kurochkin,
|
||||
Mike Revi, Andres Garcia, Michael Goffioul
|
||||
Mike Revi, Andres Garcia, Michael Goffioul, Markus Moeller
|
||||
|
||||
Thanks! (and sorry if I forgot to mention someone)
|
||||
|
@ -7,10 +7,6 @@ To be addressed before 7.19.1 (planned release: October/November 2008)
|
||||
|
||||
168 - curl_easy_pause bugs (still under discussion)
|
||||
|
||||
169 - curl crash when using sftp with socks. We need a Curl_plain_read() to
|
||||
use for the SOCKS code in the same style I made the Curl_plain_write()
|
||||
before.
|
||||
|
||||
171 - [PATCH] add some locking for thread-safety to NSS implementation
|
||||
|
||||
172 - Apply the getdate patch with Jamie Lokier's date function. Needs an
|
||||
@ -27,3 +23,4 @@ To be addressed before 7.19.1 (planned release: October/November 2008)
|
||||
Patch: http://sourceforge.net/tracker/index.php?func=detail&aid=2107803&group_id=976&atid=100976
|
||||
|
||||
176 -
|
||||
|
||||
|
41
lib/sendf.c
41
lib/sendf.c
@ -534,6 +534,30 @@ CURLcode Curl_client_write(struct connectdata *conn,
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
CURLcode Curl_read_plain(curl_socket_t sockfd,
|
||||
char *buf,
|
||||
size_t bytesfromsocket,
|
||||
ssize_t *n)
|
||||
{
|
||||
ssize_t nread = sread(sockfd, buf, bytesfromsocket);
|
||||
|
||||
if(-1 == nread) {
|
||||
int err = SOCKERRNO;
|
||||
#ifdef USE_WINSOCK
|
||||
if(WSAEWOULDBLOCK == err)
|
||||
#else
|
||||
if((EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err))
|
||||
#endif
|
||||
return -1;
|
||||
else
|
||||
return CURLE_RECV_ERROR;
|
||||
}
|
||||
|
||||
/* we only return number of bytes read when we return OK */
|
||||
*n = nread;
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||
#endif
|
||||
@ -613,20 +637,13 @@ int Curl_read(struct connectdata *conn, /* connection data */
|
||||
if(conn->sec_complete)
|
||||
nread = Curl_sec_read(conn, sockfd, buffertofill,
|
||||
bytesfromsocket);
|
||||
else
|
||||
nread = sread(sockfd, buffertofill, bytesfromsocket);
|
||||
|
||||
if(-1 == nread) {
|
||||
int err = SOCKERRNO;
|
||||
#ifdef USE_WINSOCK
|
||||
if(WSAEWOULDBLOCK == err)
|
||||
#else
|
||||
if((EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err))
|
||||
#endif
|
||||
return -1;
|
||||
else {
|
||||
CURLcode ret = Curl_read_plain(sockfd, buffertofill, bytesfromsocket,
|
||||
&nread);
|
||||
if(ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if(nread >= 0) {
|
||||
if(pipelining) {
|
||||
memcpy(buf, conn->master_buffer, nread);
|
||||
|
@ -58,6 +58,12 @@ CURLcode Curl_client_write(struct connectdata *conn, int type, char *ptr,
|
||||
void Curl_read_rewind(struct connectdata *conn,
|
||||
size_t extraBytesRead);
|
||||
|
||||
/* internal read-function, does plain socket only */
|
||||
CURLcode Curl_read_plain(curl_socket_t sockfd,
|
||||
char *buf,
|
||||
size_t bytesfromsocket,
|
||||
ssize_t *n);
|
||||
|
||||
/* internal read-function, does plain socket, SSL and krb4 */
|
||||
int Curl_read(struct connectdata *conn, curl_socket_t sockfd,
|
||||
char *buf, size_t buffersize,
|
||||
|
@ -88,7 +88,7 @@ static int blockread_all(struct connectdata *conn, /* connection data */
|
||||
result = ~CURLE_OK;
|
||||
break;
|
||||
}
|
||||
result = Curl_read(conn, sockfd, buf, buffersize, &nread);
|
||||
result = Curl_read_plain(sockfd, buf, buffersize, &nread);
|
||||
if(result)
|
||||
break;
|
||||
|
||||
|
@ -3,3 +3,4 @@
|
||||
# test cases are run by runtests.pl. Just add the plain test case numbers, one
|
||||
# per line.
|
||||
# Lines starting with '#' letters are treated as comments.
|
||||
160
|
||||
|
Loading…
Reference in New Issue
Block a user