Commit 8f5909b6 authored by Patrick Monnerat's avatar Patrick Monnerat
Browse files

Allow CURLOPT_COPYPOSTFIELDS with explicit data size = 0

parent bef2e7f2
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -1036,10 +1036,10 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
      result = Curl_setstropt(&data->set.str[STRING_COPYPOSTFIELDS], argptr);
    else {
      /*
       *  Check that request length does not overflow the size_t type.
       *  Check that requested length does not overflow the size_t type.
       */

      if ((data->set.postfieldsize < 1) ||
      if ((data->set.postfieldsize < 0) ||
          ((sizeof(curl_off_t) != sizeof(size_t)) &&
           (data->set.postfieldsize > (curl_off_t)((size_t)-1))))
        result = CURLE_OUT_OF_MEMORY;
@@ -1047,12 +1047,20 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
        char * p;

        (void) Curl_setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL);
        p = malloc(data->set.postfieldsize);

        /* Allocate even when size == 0. This satisfies the need of possible
           later address compare to detect the COPYPOSTFIELDS mode, and
           to mark that postfields is used rather than read function or
           form data.
         */
        p = malloc(data->set.postfieldsize? data->set.postfieldsize: 1);

        if (!p)
          result = CURLE_OUT_OF_MEMORY;
        else {
          if (data->set.postfieldsize)
            memcpy(p, argptr, data->set.postfieldsize);

          data->set.str[STRING_COPYPOSTFIELDS] = p;
        }
      }