# [PATCH] repository: cache->squash_msg is freed twice

4 messages from 2025-12-18 to 2025-12-19. Participants: AZero13 via GitGitGadget, Eric Sunshine, Junio C Hamano.
Thread: https://gitlist.dev/t/64650

## AZero13 via GitGitGadget, 2025-12-18 15:26

Subject: [PATCH] repository: cache->squash_msg is freed twice
Message-ID: <pull.2132.git.git.1766071566022.gitgitgadget@gmail.com>
URL: https://gitlist.dev/e/pull.2132.git.git.1766071566022.gitgitgadget%40gmail.com

```
From: Greg Funni <gfunni234@gmail.com>

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

Signed-off-by: Greg Funni <gfunni234@gmail.com>
---
    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.
    
    Signed-off-by: Greg Funni gfunni234@gmail.com

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(-)

diff --git a/repository.c b/repository.c
index 863f24411b..c7e75215ac 100644
--- a/repository.c
+++ b/repository.c
@@ -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
-- 
gitgitgadget

```

## AZero13 via GitGitGadget, 2025-12-18 15:49

Subject: [PATCH v2] repository: remove duplicate free of cache->squash_msg
Message-ID: <pull.2132.v2.git.git.1766072952115.gitgitgadget@gmail.com>
URL: https://gitlist.dev/e/pull.2132.v2.git.git.1766072952115.gitgitgadget%40gmail.com
In-Reply-To: <pull.2132.git.git.1766071566022.gitgitgadget@gmail.com>

```
From: Greg Funni <gfunni234@gmail.com>

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

Signed-off-by: Greg Funni <gfunni234@gmail.com>
---
    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.
    
    Signed-off-by: Greg Funni gfunni234@gmail.com

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 <gfunni234@gmail.com>
      
       ## 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(-)

diff --git a/repository.c b/repository.c
index 863f24411b..c7e75215ac 100644
--- a/repository.c
+++ b/repository.c
@@ -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
-- 
gitgitgadget

```

## Eric Sunshine, 2025-12-18 18:18

Subject: Re: [PATCH] repository: cache->squash_msg is freed twice
Message-ID: <CAPig+cRsKGERBk2pVotrKhhy5FCmmrQODTJEgkO8GuTY2SLbiA@mail.gmail.com>
URL: https://gitlist.dev/e/CAPig%2BcRsKGERBk2pVotrKhhy5FCmmrQODTJEgkO8GuTY2SLbiA%40mail.gmail.com
In-Reply-To: <pull.2132.git.git.1766071566022.gitgitgadget@gmail.com>

```
On Thu, Dec 18, 2025 at 10:26 AM AZero13 via GitGitGadget
<gitgitgadget@gmail.com> wrote:
> Thankfully, it is set to NULL, so no security consequences.
> However, this is still a mistake that must be rectified.
>
> Signed-off-by: Greg Funni <gfunni234@gmail.com>
> ---
> diff --git a/repository.c b/repository.c
> @@ -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.

```

## Junio C Hamano, 2025-12-19 03:52

Subject: Re: [PATCH] repository: cache->squash_msg is freed twice
Message-ID: <xmqq4ipnxh5h.fsf@gitster.g>
URL: https://gitlist.dev/e/xmqq4ipnxh5h.fsf%40gitster.g
In-Reply-To: <CAPig+cRsKGERBk2pVotrKhhy5FCmmrQODTJEgkO8GuTY2SLbiA@mail.gmail.com>

```
Eric Sunshine <sunshine@sunshineco.com> writes:

> On Thu, Dec 18, 2025 at 10:26 AM AZero13 via GitGitGadget
> <gitgitgadget@gmail.com> wrote:
>> Thankfully, it is set to NULL, so no security consequences.
>> However, this is still a mistake that must be rectified.
>>
>> Signed-off-by: Greg Funni <gfunni234@gmail.com>
>> ---
>> diff --git a/repository.c b/repository.c
>> @@ -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.

Thanks, both.  Will queue.


```
