Commit 391e8afd authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

- 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.
parent eff2c3a6
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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
+3 −1
Original line number Diff line number Diff line
@@ -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)
+1 −4
Original line number Diff line number Diff line
@@ -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 - 
+29 −12
Original line number Diff line number Diff line
@@ -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);
+6 −0
Original line number Diff line number Diff line
@@ -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,
Loading