[PATCH 3/6] find_default_branch(): Free refmatch after usage
Lukas Fleischer
cgit at cryptocrack.de
Mon Mar 4 13:25:35 CET 2013
Fixes following memory leak seen with "PATH_INFO=/cgit/refs/":
==13408== 7 bytes in 1 blocks are definitely lost in loss record 4 of 52
==13408== at 0x4C2C04B: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==13408== by 0x56F2DF1: strdup (in /usr/lib/libc-2.17.so)
==13408== by 0x46CA78: xstrdup (wrapper.c:35)
==13408== by 0x405840: find_current_ref (cgit.c:426)
==13408== by 0x44BE5A: do_one_ref (refs.c:527)
==13408== by 0x44D3E0: do_for_each_ref_in_dir (refs.c:553)
==13408== by 0x44D85A: do_for_each_ref (refs.c:1298)
==13408== by 0x405889: find_default_branch (cgit.c:438)
==13408== by 0x405AC4: prepare_repo_cmd (cgit.c:490)
==13408== by 0x405D97: process_request (cgit.c:557)
==13408== by 0x407490: cache_process (cache.c:322)
==13408== by 0x406C18: main (cgit.c:864)
Signed-off-by: Lukas Fleischer <cgit at cryptocrack.de>
---
cgit.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/cgit.c b/cgit.c
index 5b20de3..afafcce 100644
--- a/cgit.c
+++ b/cgit.c
@@ -427,6 +427,12 @@ static int find_current_ref(const char *refname, const unsigned char *sha1,
return info->match;
}
+static void free_refmatch_inner(struct refmatch *info)
+{
+ if (info->first_ref)
+ free(info->first_ref);
+}
+
static char *find_default_branch(struct cgit_repo *repo)
{
struct refmatch info;
@@ -442,6 +448,8 @@ static char *find_default_branch(struct cgit_repo *repo)
ref = info.first_ref;
if (ref)
ref = xstrdup(ref);
+ free_refmatch_inner(&info);
+
return ref;
}
--
1.8.2.rc0.247.g811e0c0
More information about the CGit
mailing list