write-tree: Avoid leak when index refers to an invalid object
[gitweb.git] / remote.c
index ea2323bac36d6fd0dbf86870a13774cddd320448..afbba47460c0204721d61800033ed0a9f93f92bc 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -659,10 +659,9 @@ static struct refspec *parse_refspec_internal(int nr_refspec, const char **refsp
 
 int valid_fetch_refspec(const char *fetch_refspec_str)
 {
-       const char *fetch_refspec[] = { fetch_refspec_str };
        struct refspec *refspec;
 
-       refspec = parse_refspec_internal(1, fetch_refspec, 1, 1);
+       refspec = parse_refspec_internal(1, &fetch_refspec_str, 1, 1);
        free_refspecs(refspec, 1);
        return !!refspec;
 }
@@ -763,7 +762,7 @@ void ref_remove_duplicates(struct ref *ref_map)
                if (!ref_map->peer_ref)
                        continue;
 
-               item = string_list_lookup(ref_map->peer_ref->name, &refs);
+               item = string_list_lookup(&refs, ref_map->peer_ref->name);
                if (item) {
                        if (strcmp(((struct ref *)item->util)->name,
                                   ref_map->name))
@@ -778,7 +777,7 @@ void ref_remove_duplicates(struct ref *ref_map)
                        continue;
                }
 
-               item = string_list_insert(ref_map->peer_ref->name, &refs);
+               item = string_list_insert(&refs, ref_map->peer_ref->name);
                item->util = ref_map;
        }
        string_list_clear(&refs, 0);
@@ -1711,7 +1710,7 @@ struct ref *get_stale_heads(struct remote *remote, struct ref *fetch_map)
        info.ref_names = &ref_names;
        info.stale_refs_tail = &stale_refs;
        for (ref = fetch_map; ref; ref = ref->next)
-               string_list_append(ref->name, &ref_names);
+               string_list_append(&ref_names, ref->name);
        sort_string_list(&ref_names);
        for_each_ref(get_stale_heads_cb, &info);
        string_list_clear(&ref_names, 0);