diff options
| -rw-r--r-- | CHANGES | 4 | ||||
| -rw-r--r-- | lib/connect.c | 13 | ||||
| -rw-r--r-- | lib/transfer.c | 4 | ||||
| -rw-r--r-- | lib/url.c | 8 | 
4 files changed, 20 insertions, 9 deletions
| @@ -6,6 +6,10 @@                                    Changelog +Daniel Fandrich (26 Aug 2008) +- Fixed out of memory problems that caused torture test failures in tests +  1021 and 1067. +  Yang Tse (26 Aug 2008)  - Added check and symbol definition for WIN32 file API usage in configure,    supporting configure's --disable-largefile option for WIN32 targets also. diff --git a/lib/connect.c b/lib/connect.c index 4018eb042..860111f56 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -552,7 +552,7 @@ CURLcode Curl_store_ip_addr(struct connectdata *conn)  }  /* Used within the multi interface. Try next IP address, return TRUE if no -   more address exists */ +   more address exists or error */  static bool trynextip(struct connectdata *conn,                        int sockindex,                        bool *connected) @@ -578,8 +578,7 @@ static bool trynextip(struct connectdata *conn,        conn->sock[sockindex] = sockfd;        conn->ip_addr = ai; -      Curl_store_ip_addr(conn); -      return FALSE; +      return Curl_store_ip_addr(conn) != CURLE_OK;      }      ai = ai->ai_next;    } @@ -919,6 +918,7 @@ CURLcode Curl_connecthost(struct connectdata *conn,  /* context */    long timeout_ms;    long timeout_per_addr; +  DEBUGASSERT(sockconn);    *connected = FALSE; /* default to not connected */    /* get the timeout left */ @@ -967,9 +967,10 @@ CURLcode Curl_connecthost(struct connectdata *conn,  /* context */      before = after;    }  /* end of connect-to-each-address loop */ +  *sockconn = sockfd;    /* the socket descriptor we've connected */ +    if(sockfd == CURL_SOCKET_BAD) {      /* no good connect was made */ -    *sockconn = CURL_SOCKET_BAD;      failf(data, "couldn't connect to host");      return CURLE_COULDNT_CONNECT;    } @@ -980,10 +981,6 @@ CURLcode Curl_connecthost(struct connectdata *conn,  /* context */    if(addr)      *addr = curr_addr; -  /* allow NULL-pointers to get passed in */ -  if(sockconn) -    *sockconn = sockfd;    /* the socket descriptor we've connected */ -    data->info.numconnects++; /* to track the number of connections made */    return CURLE_OK; diff --git a/lib/transfer.c b/lib/transfer.c index dae8599b9..3294ba530 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -2182,6 +2182,10 @@ CURLcode Curl_follow(struct SessionHandle *data,          free(data->change.referer);        data->change.referer = strdup(data->change.url); +      if (!data->change.referer) { +        data->change.referer_alloc = FALSE; +        return CURLE_OUT_OF_MEMORY; +      }        data->change.referer_alloc = TRUE; /* yes, free this later */      }    } @@ -2206,6 +2206,12 @@ CURLcode Curl_disconnect(struct connectdata *conn)      }    } +  /* Cleanup possible redirect junk */ +  if(data->req.newurl) { +    free(data->req.newurl); +    data->req.newurl = NULL; +  } +    if(conn->handler->disconnect)      /* This is set if protocol-specific cleanups should be made */      conn->handler->disconnect(conn); @@ -4483,7 +4489,7 @@ static CURLcode setup_conn(struct connectdata *conn,    }  #endif -  return CURLE_OK; +  return result;  }  CURLcode Curl_connect(struct SessionHandle *data, | 
