]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
setopt: if the buffer exists, refuse the new BUFFERSIZE
authorDaniel Stenberg <daniel@haxx.se>
Fri, 21 Aug 2020 14:19:27 +0000 (16:19 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 24 Aug 2020 07:08:56 +0000 (09:08 +0200)
The buffer only exists during transfer and then we shouldn't change the
size (the setopt is not documented to work then).

Reported-by: Harry Sintonen
Closes #5842

lib/setopt.c

index d6213357ccd4ff743823501356399801faafae85..768452ca1c764b7ae722f9aed4900f93881e620f 100644 (file)
@@ -2075,6 +2075,9 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
      * The application kindly asks for a differently sized receive buffer.
      * If it seems reasonable, we'll use it.
      */
+    if(data->state.buffer)
+      return CURLE_BAD_FUNCTION_ARGUMENT;
+
     arg = va_arg(param, long);
 
     if(arg > READBUFFER_MAX)
@@ -2084,18 +2087,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
     else if(arg < READBUFFER_MIN)
       arg = READBUFFER_MIN;
 
-    /* Resize if new size */
-    if((arg != data->set.buffer_size) && data->state.buffer) {
-      char *newbuff = realloc(data->state.buffer, arg + 1);
-      if(!newbuff) {
-        DEBUGF(fprintf(stderr, "Error: realloc of buffer failed\n"));
-        result = CURLE_OUT_OF_MEMORY;
-      }
-      else
-        data->state.buffer = newbuff;
-    }
     data->set.buffer_size = arg;
-
     break;
 
   case CURLOPT_UPLOAD_BUFFERSIZE: