]> git.ipfire.org Git - thirdparty/git.git/commitdiff
push: free_refs() the "local_refs" in set_refspecs()
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Mon, 6 Feb 2023 23:07:54 +0000 (00:07 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 6 Feb 2023 23:34:40 +0000 (15:34 -0800)
Fix a memory leak that's been with us since this code was added in
ca02465b413 (push: use remote.$name.push as a refmap, 2013-12-03).

The "remote = remote_get(...)" added in the same commit would seem to
leak based only on the context here, but that function is a wrapper
for sticking the remotes we fetch into "the_repository->remote_state".

See fd3cb0501e1 (remote: move static variables into per-repository
struct, 2021-11-17) for the addition of code in repository.c that
free's the "remote" allocated here.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 files changed:
builtin/push.c
t/t1416-ref-transaction-hooks.sh
t/t2402-worktree-list.sh
t/t5504-fetch-receive-strict.sh
t/t5523-push-upstream.sh
t/t5529-push-errors.sh
t/t5546-receive-limits.sh
t/t5547-push-quarantine.sh
t/t5606-clone-options.sh
t/t5810-proto-disable-local.sh
t/t5813-proto-disable-ssh.sh
t/t7409-submodule-detached-work-tree.sh
t/t7416-submodule-dash-url.sh
t/t7450-bad-git-dotfiles.sh

index 97b35eca3ab9c579c0b47567b079ab3f56205b39..8f7d326ab3f4b06d3d3d1262d5276fd8c6b2b968 100644 (file)
@@ -134,6 +134,7 @@ static void set_refspecs(const char **refs, int nr, const char *repo)
                } else
                        refspec_append(&rs, ref);
        }
+       free_refs(local_refs);
 }
 
 static int push_url_of_remote(struct remote *remote, const char ***url_p)
index 27731722a5b6b26bad0b1929c274414239cc449e..b32ca798f9ff9fb60796dfefd41ad391e229dbf5 100755 (executable)
@@ -5,6 +5,7 @@ test_description='reference transaction hooks'
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success setup '
index 79e0fce2d90fb9e947a76052c32e41d20519e6bd..9ad9be0c2089335b67fcb08f00ade4b46ab5637c 100755 (executable)
@@ -5,6 +5,7 @@ test_description='test git worktree list'
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success 'setup' '
index 88d3c56750accc7376614f0fda48d85ddf298cc6..0b8ab4afdbe9a0bd0aa304770b6db8f6d303ec9b 100755 (executable)
@@ -4,6 +4,7 @@ test_description='fetch/receive strict mode'
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success 'setup and inject "corrupt or missing" object' '
index fdb429205643b8ccb03529795f5b6f6aef63d93a..c9acc076353a6ae784ced36a4927cda352950521 100755 (executable)
@@ -4,6 +4,7 @@ test_description='push with --set-upstream'
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-terminal.sh
 
index ce85fd30ad195eecd061ad0ec734542daf2d7c59..0247137cb36474c22f6ce5ed045379fa43f1a3ea 100755 (executable)
@@ -1,6 +1,8 @@
 #!/bin/sh
 
 test_description='detect some push errors early (before contacting remote)'
+
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success 'setup commits' '
index 0b0e987fdb73fcd7d8f54c393ee7deb15a4b5b8c..eed3c9d81abaffa8886b44f26224111b369735ce 100755 (executable)
@@ -1,6 +1,8 @@
 #!/bin/sh
 
 test_description='check receive input limits'
+
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 # Let's run tests with different unpack limits: 1 and 10000
index 1876fb34e51a09f8b3d7f6d82d174044c9a16c84..9f899b8c7d7bcc63ba5fe97c513748eeba436edb 100755 (executable)
@@ -1,6 +1,8 @@
 #!/bin/sh
 
 test_description='check quarantine of objects during push'
+
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success 'create picky dest repo' '
index cf221e92c4d97e852f1bdefbf61f6caded87aff2..27f9f7763895ec98761800d2a3e4ad2adf33aeb9 100755 (executable)
@@ -4,6 +4,7 @@ test_description='basic clone options'
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success 'setup' '
index c1ef99b85c293e8a8bfc0872e3511fe8b7029213..862610256fb082a9ed62547cc51dc0a3cb754c48 100755 (executable)
@@ -1,6 +1,8 @@
 #!/bin/sh
 
 test_description='test disabling of local paths in clone/fetch'
+
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 . "$TEST_DIRECTORY/lib-proto-disable.sh"
 
index 3f084ee306517b2bc991365f6f15b76627e1d125..2e975dc70ec2c8cdb8b92cada469439a99c1d544 100755 (executable)
@@ -1,6 +1,8 @@
 #!/bin/sh
 
 test_description='test disabling of git-over-ssh in clone/fetch'
+
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 . "$TEST_DIRECTORY/lib-proto-disable.sh"
 
index 374ed481e9c64b9813a11b57c80f7b6f22c791e1..574a6fc526ea0c22ed2ca9df925854235632bb42 100755 (executable)
@@ -13,6 +13,7 @@ TEST_NO_CREATE_REPO=1
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success 'setup' '
index 3ebd98598144c95165cc75870e6d586407add1c8..7cf72b9a07671c671c5ed7bbe275125ee7c142e6 100755 (executable)
@@ -1,6 +1,8 @@
 #!/bin/sh
 
 test_description='check handling of disallowed .gitmodule urls'
+
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success 'setup' '
index ba1f569bcbbdc613c768bd34e7de6e560b809c9d..0d0c3f2c683122dbf611cd0ac57bce86166acab3 100755 (executable)
@@ -12,6 +12,8 @@ Such as:
 
   - symlinked .gitmodules, etc
 '
+
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-pack.sh