Fix memory leak in submodule.c
PATCH 1/1 Fix memory leak in submodule.c
The strbuf used in add_submodule_odb() was never released. So for every submodule - populated or not - we leaked its object directory name when using "git diff*" with the --submodule option.
Signed-off-by Jens Lehmann <[email protected]>
--- submodule.c | 14 +++++++++----- 1 files changed, 9 insertions(+), 5 deletions(-)
submodule.c +9 -5
@@ -10,17 +10,19 @@ static int add_submodule_odb(const char *path) {struct strbuf objects_directory =STRBUF_INIT ;struct alternate_object_database *alt_odb; +int ret =0 ;strbuf_addf (&objects_directory,"%s/.git/objects/" , path); -if (!is_directory (objects_directory.buf)) -return -1 ; - +if (!is_directory (objects_directory.buf)) { + ret =-1 ; + goto done; + }/* avoid adding it twice */ for (alt_odb = alt_odb_list; alt_odb; alt_odb = alt_odb->next)if (alt_odb->name - alt_odb->base == objects_directory.len && !strncmp (alt_odb->base, objects_directory.buf, objects_directory.len)) -return 0 ; + goto done; alt_odb =xmalloc (objects_directory.len +42 +sizeof (*alt_odb)); alt_odb->next = alt_odb_list;
@@ -31,7 +33,9 @@ static int add_submodule_odb(const char *path) alt_odb->name[41 ] ='\0' ; alt_odb_list = alt_odb;prepare_alt_odb (); -return 0 ; +done: +strbuf_release (&objects_directory); +return ret; } void show_submodule_summary(FILE *f, const char *path,
Signature · 1 line
1.7.0.rc1.141.gd3fd.dirty
Thanks.