Merge branch 'maint'
authorJunio C Hamano <gitster@pobox.com>
Mon, 14 Sep 2009 21:48:27 +0000 (14:48 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 14 Sep 2009 21:48:27 +0000 (14:48 -0700)
* maint:
  http.c: avoid freeing an uninitialized pointer

1  2 
http.c

diff --combined http.c
--- 1/http.c
--- 2/http.c
+++ b/http.c
@@@ -866,7 -866,7 +866,7 @@@ static int fetch_pack_index(unsigned ch
        int ret = 0;
        char *hex = xstrdup(sha1_to_hex(sha1));
        char *filename;
-       char *url;
+       char *url = NULL;
        struct strbuf buf = STRBUF_INIT;
  
        if (has_pack_index(sha1)) {
@@@ -995,6 -995,7 +995,6 @@@ int finish_http_pack_request(struct htt
  struct http_pack_request *new_http_pack_request(
        struct packed_git *target, const char *base_url)
  {
 -      char *url;
        char *filename;
        long prev_posn = 0;
        char range[RANGE_HEADER_SIZE];
        end_url_with_slash(&buf, base_url);
        strbuf_addf(&buf, "objects/pack/pack-%s.pack",
                sha1_to_hex(target->sha1));
 -      url = strbuf_detach(&buf, NULL);
 -      preq->url = xstrdup(url);
 +      preq->url = strbuf_detach(&buf, NULL);
  
        filename = sha1_pack_name(target->sha1);
        snprintf(preq->filename, sizeof(preq->filename), "%s", filename);
        preq->slot->local = preq->packfile;
        curl_easy_setopt(preq->slot->curl, CURLOPT_FILE, preq->packfile);
        curl_easy_setopt(preq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite);
 -      curl_easy_setopt(preq->slot->curl, CURLOPT_URL, url);
 +      curl_easy_setopt(preq->slot->curl, CURLOPT_URL, preq->url);
        curl_easy_setopt(preq->slot->curl, CURLOPT_HTTPHEADER,
                no_pragma_header);
  
  
  abort:
        free(filename);
 +      free(preq->url);
 +      free(preq);
        return NULL;
  }
  
@@@ -1089,6 -1089,7 +1089,6 @@@ struct http_object_request *new_http_ob
        char *hex = sha1_to_hex(sha1);
        char *filename;
        char prevfile[PATH_MAX];
 -      char *url;
        int prevlocal;
        unsigned char prev_buf[PREV_BUF_SIZE];
        ssize_t prev_read = 0;
  
        git_SHA1_Init(&freq->c);
  
 -      url = get_remote_object_url(base_url, hex, 0);
 -      freq->url = xstrdup(url);
 +      freq->url = get_remote_object_url(base_url, hex, 0);
  
        /*
         * If a previous temp file is present, process what was already
                if (prev_posn>0) {
                        prev_posn = 0;
                        lseek(freq->localfile, 0, SEEK_SET);
 -                      ftruncate(freq->localfile, 0);
 +                      if (ftruncate(freq->localfile, 0) < 0) {
 +                              error("Couldn't truncate temporary file %s for %s: %s",
 +                                        freq->tmpfile, freq->filename, strerror(errno));
 +                              goto abort;
 +                      }
                }
        }
  
        curl_easy_setopt(freq->slot->curl, CURLOPT_FILE, freq);
        curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite_sha1_file);
        curl_easy_setopt(freq->slot->curl, CURLOPT_ERRORBUFFER, freq->errorstr);
 -      curl_easy_setopt(freq->slot->curl, CURLOPT_URL, url);
 +      curl_easy_setopt(freq->slot->curl, CURLOPT_URL, freq->url);
        curl_easy_setopt(freq->slot->curl, CURLOPT_HTTPHEADER, no_pragma_header);
  
        /*
  
        return freq;
  
 -      free(url);
  abort:
        free(filename);
 +      free(freq->url);
        free(freq);
        return NULL;
  }