Commit 66f5baa1 authored by Dan Fandrich's avatar Dan Fandrich
Browse files

Fixed some memory leaks in the command-line tool that caused most of the

torture tests to fail.
parent 1cb921b7
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -6,6 +6,10 @@

                                  Changelog

Daniel Fandrich (9 Aug 2009)
- Fixed some memory leaks in the command-line tool that caused most of the
  torture tests to fail.

Daniel Stenberg (2 Aug 2009)
- Curt Bogmine reported a problem with SNI enabled on a particular server. We
  should introduce an option to disable SNI, but as we're in feature freeze
+43 −8
Original line number Diff line number Diff line
@@ -4378,8 +4378,11 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
             file output call */

          if(config->create_dirs &&
             (-1 == create_dir_hierarchy(outfile, config->errors)))
            return CURLE_WRITE_ERROR;
             (-1 == create_dir_hierarchy(outfile, config->errors))) {
            free(url);
	    res = CURLE_WRITE_ERROR;
	    break;
	  }

          if(config->resume_from_current) {
            /* We're told to continue from where we are now. Get the
@@ -4404,7 +4407,9 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
            outs.stream=(FILE *) fopen(outfile, config->resume_from?"ab":"wb");
            if (!outs.stream) {
              helpf(config->errors, "Can't open '%s'!\n", outfile);
              return CURLE_WRITE_ERROR;
              free(url);
	      res = CURLE_WRITE_ERROR;
	      break;
            }
          }
          else {
@@ -4449,13 +4454,15 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
              char *urlbuffer = malloc(strlen(url) + strlen(filep) + 3);
              if(!urlbuffer) {
                helpf(config->errors, "out of memory\n");
                return CURLE_OUT_OF_MEMORY;
                free(url);
	        res = CURLE_OUT_OF_MEMORY;
	        break;
              }
              if(ptr)
                /* there is a trailing slash on the URL */
                sprintf(urlbuffer, "%s%s", url, filep);
              else
                /* thers is no trailing slash on the URL */
                /* there is no trailing slash on the URL */
                sprintf(urlbuffer, "%s/%s", url, filep);

              curl_free(filep);
@@ -4552,7 +4559,21 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
          urlbuffer = malloc(strlen(url) + strlen(httpgetfields) + 3);
          if(!urlbuffer) {
            helpf(config->errors, "out of memory\n");
            return CURLE_OUT_OF_MEMORY;

            /* Free the list of remaining URLs and globbed upload files
             * to force curl to exit immediately
             */
            if(urls) {
              glob_cleanup(urls);
              urls = NULL;
            }
            if(inglob) {
              glob_cleanup(inglob);
              inglob = NULL;
            }

	    res = CURLE_OUT_OF_MEMORY;
	    goto quit_urls;
          }
          if (pc)
            sprintf(urlbuffer, "%s%c%s", url, sep, httpgetfields);
@@ -4704,8 +4725,22 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
            my_setopt_str(curl, CURLOPT_SSH_KNOWNHOSTS, file);
            curl_free(file);
          }
          else
            return CURLE_OUT_OF_MEMORY;
          else {
            /* Free the list of remaining URLs and globbed upload files
             * to force curl to exit immediately
             */
            if(urls) {
              glob_cleanup(urls);
              urls = NULL;
            }
            if(inglob) {
              glob_cleanup(inglob);
              inglob = NULL;
            }

	    res = CURLE_OUT_OF_MEMORY;
	    goto quit_urls;
          }
        }

        if(config->no_body || config->remote_time) {