# [PATCH] mailmap: plug memory leak in read_mailmap_blob()

2 messages from 2024-07-25 to 2024-07-26. Participants: Junio C Hamano, Jeff King.
Thread: https://gitlist.dev/t/61848

## Junio C Hamano, 2024-07-25 23:12

Subject: [PATCH] mailmap: plug memory leak in read_mailmap_blob()
Message-ID: <xmqqcyn112xi.fsf@gitster.g>
URL: https://gitlist.dev/e/xmqqcyn112xi.fsf%40gitster.g

```
When a named object to read mailmap from is not a blob, the code
correctly errors out, but it forgot to free the object data before
doing so.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 mailmap.c          | 4 +++-
 t/t4203-mailmap.sh | 1 +
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/mailmap.c b/mailmap.c
index 2d0212f444..2acf97f307 100644
--- a/mailmap.c
+++ b/mailmap.c
@@ -201,8 +201,10 @@ static int read_mailmap_blob(struct string_list *map, const char *name)
 	buf = repo_read_object_file(the_repository, &oid, &type, &size);
 	if (!buf)
 		return error("unable to read mailmap object at %s", name);
-	if (type != OBJ_BLOB)
+	if (type != OBJ_BLOB) {
+		free(buf);
 		return error("mailmap is not a blob: %s", name);
+	}
 
 	read_mailmap_string(map, buf);
 
diff --git a/t/t4203-mailmap.sh b/t/t4203-mailmap.sh
index 8a88dd7900..79e5f42760 100755
--- a/t/t4203-mailmap.sh
+++ b/t/t4203-mailmap.sh
@@ -5,6 +5,7 @@ test_description='.mailmap configurations'
 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 commits and contacts file' '
-- 
2.46.0-rc2-67-g99767055c1


```

## Jeff King, 2024-07-26 04:44

Subject: Re: [PATCH] mailmap: plug memory leak in read_mailmap_blob()
Message-ID: <20240726044403.GB642208@coredump.intra.peff.net>
URL: https://gitlist.dev/e/20240726044403.GB642208%40coredump.intra.peff.net
In-Reply-To: <xmqqcyn112xi.fsf@gitster.g>

```
On Thu, Jul 25, 2024 at 04:12:41PM -0700, Junio C Hamano wrote:

> When a named object to read mailmap from is not a blob, the code
> correctly errors out, but it forgot to free the object data before
> doing so.
> [..]
> -	if (type != OBJ_BLOB)
> +	if (type != OBJ_BLOB) {
> +		free(buf);
>  		return error("mailmap is not a blob: %s", name);
> +	}

Looks obviously correct. This one is almost certainly my fault.

-Peff

```
