curl tool: OOM handling fixes
authorYang Tse <yangsita@gmail.com>
Wed, 5 Oct 2011 14:41:04 +0000 (16:41 +0200)
committerYang Tse <yangsita@gmail.com>
Wed, 5 Oct 2011 14:41:04 +0000 (16:41 +0200)
src/tool_getparam.c
src/tool_operhlp.c

index ae2970f..1c92e05 100644 (file)
@@ -936,7 +936,8 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         }
         else {
           GetStr(&postdata, p);
-          size = strlen(postdata);
+          if(postdata)
+            size = strlen(postdata);
         }
 
         if(!postdata) {
@@ -1019,8 +1020,12 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       }
 
 #ifdef CURL_DOES_CONVERSIONS
-      if(subletter != 'b') { /* NOT forced binary, convert to ASCII */
-        convert_to_network(postdata, strlen(postdata));
+      if(subletter != 'b') {
+        /* NOT forced binary, convert to ASCII */
+        if(convert_to_network(postdata, strlen(postdata))) {
+          Curl_safefree(postdata);
+          return PARAM_NO_MEM;
+        }
       }
 #endif
 
@@ -1032,6 +1037,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         curl_off_t newlen = oldlen + size + 2;
         config->postfields = malloc((size_t)newlen);
         if(!config->postfields) {
+          Curl_safefree(oldpost);
           Curl_safefree(postdata);
           return PARAM_NO_MEM;
         }
@@ -1053,8 +1059,10 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       We can't set the request type here, as this data might be used in
       a simple GET if -G is used. Already or soon.
 
-      if(SetHTTPrequest(HTTPREQ_SIMPLEPOST, &config->httpreq))
-      return PARAM_BAD_USE;
+      if(SetHTTPrequest(HTTPREQ_SIMPLEPOST, &config->httpreq)) {
+        Curl_safefree(postdata);
+        return PARAM_BAD_USE;
+      }
     */
     break;
     case 'D':
index 5a6a670..d7dbe13 100644 (file)
@@ -132,6 +132,7 @@ char *add_file_name_to_url(CURL *curl, char *url, const char *filename)
     if(encfile) {
       char *urlbuffer = malloc(strlen(url) + strlen(encfile) + 3);
       if(!urlbuffer) {
+        curl_free(encfile);
         Curl_safefree(url);
         return NULL;
       }
@@ -143,8 +144,8 @@ char *add_file_name_to_url(CURL *curl, char *url, const char *filename)
         sprintf(urlbuffer, "%s/%s", url, encfile);
 
       curl_free(encfile);
-
       Curl_safefree(url);
+
       url = urlbuffer; /* use our new URL instead! */
     }
   }