]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fetch-pack: clear alternate shallow when complete
authorbrian m. carlson <sandals@crustytoothpaste.net>
Mon, 4 Feb 2019 00:06:50 +0000 (00:06 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 4 Feb 2019 21:33:32 +0000 (13:33 -0800)
When we write an alternate shallow file in update_shallow, we write it
into the lock file. The string stored in alternate_shallow_file is
copied from the lock file path, but it is freed the moment that the lock
file is closed, since we call strbuf_release to free that path.

This used to work, since we did not invoke git index-pack more than
once, but now that we do, we reuse the freed memory. Ensure we reset the
value to NULL to avoid using freed memory. git index-pack will read the
repository's shallow file, which will have been updated with the correct
information.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fetch-pack.c

index 577faa6229d073768195dff6bcb0f113e5fbd4be..2d76287674f035b3534ae31934f577c472a9b90d 100644 (file)
@@ -1489,6 +1489,7 @@ static void update_shallow(struct fetch_pack_args *args,
                        rollback_lock_file(&shallow_lock);
                } else
                        commit_lock_file(&shallow_lock);
+               alternate_shallow_file = NULL;
                return;
        }
 
@@ -1512,6 +1513,7 @@ static void update_shallow(struct fetch_pack_args *args,
                                                &alternate_shallow_file,
                                                &extra);
                        commit_lock_file(&shallow_lock);
+                       alternate_shallow_file = NULL;
                }
                oid_array_clear(&extra);
                return;
@@ -1551,6 +1553,7 @@ static void update_shallow(struct fetch_pack_args *args,
                commit_lock_file(&shallow_lock);
                oid_array_clear(&extra);
                oid_array_clear(&ref);
+               alternate_shallow_file = NULL;
                return;
        }