Commit 7247041e authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Improved checks for bad memory situations and proper behaviour when we

run out of memory.
parent 017a78d0
Loading
Loading
Loading
Loading
+33 −17
Original line number Diff line number Diff line
@@ -591,7 +591,6 @@ CURLcode add_buffer_send(send_buffer *in,
static
CURLcode add_bufferf(send_buffer *in, const char *fmt, ...)
{
  CURLcode result = CURLE_OUT_OF_MEMORY;
  char *s;
  va_list ap;
  va_start(ap, fmt);
@@ -599,10 +598,16 @@ CURLcode add_bufferf(send_buffer *in, const char *fmt, ...)
  va_end(ap);

  if(s) {
    result = add_buffer(in, s, strlen(s));
    CURLcode result = add_buffer(in, s, strlen(s));
    free(s);
    if(CURLE_OK == result)
      return CURLE_OK;
  }
  return result;
  /* If we failed, we cleanup the whole buffer and return error */
  if(in->buffer)
    free(in->buffer);
  free(in);
  return CURLE_OUT_OF_MEMORY;
}

/*
@@ -1152,6 +1157,10 @@ CURLcode Curl_http(struct connectdata *conn)
                                    host,
                                    conn->bits.ipv6_ip?"]":"",
                                    conn->remote_port);

    if(!conn->allocptr.host)
      /* without Host: we can't make a nice request */
      return CURLE_OUT_OF_MEMORY;
  }

  if(data->cookies) {
@@ -1290,7 +1299,11 @@ CURLcode Curl_http(struct connectdata *conn)
    /* initialize a dynamic send-buffer */
    req_buffer = add_buffer_init();

    if(!req_buffer)
      return CURLE_OUT_OF_MEMORY;

    /* add the main request stuff */
    result =
      add_bufferf(req_buffer,
                  "%s " /* GET/HEAD/POST/PUT */
                  "%s HTTP/%s\r\n" /* path + HTTP version */
@@ -1326,6 +1339,9 @@ CURLcode Curl_http(struct connectdata *conn)
                te
                );

    if(result)
      return result;

    if(co) {
      int count=0;
      struct Cookie *store=co;