Skip to contentSkip to conversation

repository: cache->squash_msg is freed twice

PATCH In review AZero13 via GitGitGadget 3 participants 4 messages Dec 18, 2025 – Dec 19, 2025

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 repository: cache->squash_msg is freed twice

From: Greg Funni <[email protected]>

Thankfully, it is set to NULL, so no security consequences. However, this is still a mistake that must be rectified.

---
repository: cache->squash_msg is freed twice

Thankfully, it is set to NULL, so no security consequences.

However, this is still a mistake that must be rectified.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2132%2FAZero13%2Ftwice-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2132/AZero13/twice-v1
Pull-Request: https://github.com/git/git/pull/2132

 repository.c | 1 -
 1 file changed, 1 deletion(-)
repository.c +0 -1
index 863f24411b..c7e75215ac 100644
@@ -349,7 +349,6 @@ out:
 
 static void repo_clear_path_cache(struct repo_path_cache *cache)
 {
-	FREE_AND_NULL(cache->squash_msg);
 	FREE_AND_NULL(cache->squash_msg);
 	FREE_AND_NULL(cache->merge_msg);
 	FREE_AND_NULL(cache->merge_rr);

base-commit: c4a0c8845e2426375ad257b6c221a3a7d92ecfda

Signature · 1 line
gitgitgadget
#1 lore raw

PATCH v2 1/1 repository: remove duplicate free of cache->squash_msg

From: Greg Funni <[email protected]>

Thankfully, it is set to NULL, so no security consequences. However, this is still a mistake that must be rectified.

---
repository: remove duplicate free of cache->squash_msg

Thankfully, it is set to NULL, so no security consequences.

However, this is still a mistake that must be rectified.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2132%2FAZero13%2Ftwice-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2132/AZero13/twice-v2
Pull-Request: https://github.com/git/git/pull/2132

Range-diff vs v1:

1: 35d0606190 ! 1: ac2abd592d repository: cache->squash_msg is freed twice
@@ Metadata
Author: Greg Funni <[email protected]>

## Commit message ##
- repository: cache->squash_msg is freed twice
+ repository: remove duplicate free of cache->squash_msg

Thankfully, it is set to NULL, so no security consequences. However, this is still a mistake that must be rectified.

 repository.c | 1 -
 1 file changed, 1 deletion(-)
repository.c +0 -1
index 863f24411b..c7e75215ac 100644
@@ -349,7 +349,6 @@ out:
 
 static void repo_clear_path_cache(struct repo_path_cache *cache)
 {
-	FREE_AND_NULL(cache->squash_msg);
 	FREE_AND_NULL(cache->squash_msg);
 	FREE_AND_NULL(cache->merge_msg);
 	FREE_AND_NULL(cache->merge_rr);

base-commit: c4a0c8845e2426375ad257b6c221a3a7d92ecfda

Signature · 1 line
gitgitgadget
#2 lore raw
In reply to AZero13 via GitGitGadget

repository.c out: · line 353

Quoted 13 lines · On Thu, Dec 18, 2025 at 10:26 AM AZero13 via GitGitGadget…

Thankfully, it is set to NULL, so no security consequences. However, this is still a mistake that must be rectified.

---

repository.c +0 -1
@@ -349,7 +349,6 @@ out:
 static void repo_clear_path_cache(struct repo_path_cache *cache)
 {
-       FREE_AND_NULL(cache->squash_msg);
        FREE_AND_NULL(cache->squash_msg);
        FREE_AND_NULL(cache->merge_msg);
        FREE_AND_NULL(cache->merge_rr);

This mistake has been present since Ævar added this function in 759f340738 (repository.c: free the "path cache" in repo_clear(), 2022-03-04), so it isn't the result of someone else coming along and adding a new field to the structure which needs freeing but then botching the call to FREE_AND_NULL(). Moreover, this function does free all the freeable members of repo_path_cache, hence, nothing is being leaked, so it must have just been a silly copy/paste mistake in the first place. Hence, this change makes sense.

#3 lore raw
Quoted 16 lines · Eric Sunshine

repository.c out: · line 353

Quoted 13 lines · On Thu, Dec 18, 2025 at 10:26 AM AZero13 via GitGitGadget…

Thankfully, it is set to NULL, so no security consequences. However, this is still a mistake that must be rectified.

---

repository.c +0 -1
@@ -349,7 +349,6 @@ out:
 static void repo_clear_path_cache(struct repo_path_cache *cache)
 {
-       FREE_AND_NULL(cache->squash_msg);
        FREE_AND_NULL(cache->squash_msg);
        FREE_AND_NULL(cache->merge_msg);
        FREE_AND_NULL(cache->merge_rr);
Quoted 8 lines

This mistake has been present since Ævar added this function in 759f340738 (repository.c: free the "path cache" in repo_clear(), 2022-03-04), so it isn't the result of someone else coming along and adding a new field to the structure which needs freeing but then botching the call to FREE_AND_NULL(). Moreover, this function does free all the freeable members of repo_path_cache, hence, nothing is being leaked, so it must have just been a silly copy/paste mistake in the first place. Hence, this change makes sense.

Thanks, both. Will queue.