diff options
Diffstat (limited to 'lib/http.c')
| -rw-r--r-- | lib/http.c | 69 | 
1 files changed, 35 insertions, 34 deletions
| diff --git a/lib/http.c b/lib/http.c index 3084d3211..388f7debf 100644 --- a/lib/http.c +++ b/lib/http.c @@ -1230,7 +1230,6 @@ CURLcode Curl_http(struct connectdata *conn)    char *buf = data->state.buffer; /* this is a short cut to the buffer */    CURLcode result=CURLE_OK;    struct HTTP *http; -  struct Cookie *co=NULL; /* no cookies from start */    char *ppath = conn->path;    char *host = conn->host.name;    const char *te = ""; /* tranfer-encoding */ @@ -1399,15 +1398,6 @@ CURLcode Curl_http(struct connectdata *conn)        return CURLE_OUT_OF_MEMORY;    } -  if(data->cookies) { -    Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); -    co = Curl_cookie_getlist(data->cookies, -                             conn->allocptr.cookiehost? -                             conn->allocptr.cookiehost:host, ppath, -                             (bool)(conn->protocol&PROT_HTTPS?TRUE:FALSE)); -    Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); -  } -    if (conn->bits.httpproxy &&        !data->set.tunnel_thru_httpproxy &&        !(conn->protocol&PROT_HTTPS))  { @@ -1611,40 +1601,51 @@ CURLcode Curl_http(struct connectdata *conn)                  http->p_pragma?http->p_pragma:"",                  http->p_accept?http->p_accept:"",                  (data->set.encoding && *data->set.encoding && conn->allocptr.accept_encoding)? -                conn->allocptr.accept_encoding:"", /* 08/28/02 jhrg */ -                (data->change.referer && conn->allocptr.ref)?conn->allocptr.ref:"" /* Referer: <data> <CRLF> */, +                conn->allocptr.accept_encoding:"", +                (data->change.referer && conn->allocptr.ref)?conn->allocptr.ref:"" /* Referer: <data> */,                  te                  );      if(result)        return result; -    if(co) { -      int count=0; -      struct Cookie *store=co; -      /* now loop through all cookies that matched */ -      while(co) { -        if(co->value) { -          if(0 == count) { -            result = add_bufferf(req_buffer, "Cookie: "); +    if(data->cookies) { +      struct Cookie *co; /* no cookies from start */ + +      Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); +      co = Curl_cookie_getlist(data->cookies, +                               conn->allocptr.cookiehost? +                               conn->allocptr.cookiehost:host, ppath, +                               (bool)(conn->protocol&PROT_HTTPS?TRUE:FALSE)); +      Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); + +      if(co) { +        int count=0; +        struct Cookie *store=co; +        /* now loop through all cookies that matched */ +        while(co) { +          if(co->value) { +            if(0 == count) { +              result = add_bufferf(req_buffer, "Cookie: "); +              if(result) +                break; +            } +            result = add_bufferf(req_buffer, +                                 "%s%s=%s", count?"; ":"", +                                 co->name, co->value);              if(result) -              return result; +              break; +            count++;            } -          result = add_bufferf(req_buffer, -                               "%s%s=%s", count?"; ":"", co->name, co->value); -          if(result) -            return result; -          count++; +          co = co->next; /* next cookie please */          } -        co = co->next; /* next cookie please */ -      } -      if(count) { -        result = add_buffer(req_buffer, "\r\n", 2); -        if(result) -          return result; +        if(count && (CURLE_OK == result)) +          result = add_buffer(req_buffer, "\r\n", 2); +         +        Curl_cookie_freelist(store); /* free the cookie list */        } -      Curl_cookie_freelist(store); /* free the cookie list */ -      co=NULL; +      if(result) +        return result;      }      if(data->set.timecondition) { | 
