{"thread":{"id":"22460","subject":"[PATCH] Fix memory leak in submodule.c","startedAt":"2010-01-31T16:43:49Z","lastAt":"2010-01-31T19:23:59Z","messageCount":2,"participants":["Jens Lehmann","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"133185","messageId":"4B65B345.1090907@web.de","threadId":"22460","inReplyTo":null,"subject":"[PATCH] Fix memory leak in submodule.c","fromName":"Jens Lehmann","fromEmail":"jens.lehmann@web.de","sentAt":"2010-01-31T16:43:49Z","receivedAt":"2010-01-31T16:43:49Z","isPatch":true,"sender":{"key":"jens.lehmann@web.de","avatar":"https://avatars.githubusercontent.com/u/135220?v=4"},"body":"The strbuf used in add_submodule_odb() was never released. So for every\nsubmodule - populated or not - we leaked its object directory name when\nusing \"git diff*\" with the --submodule option.\n\nSigned-off-by: Jens Lehmann <Jens.Lehmann@web.de>\n---\n submodule.c |   14 +++++++++-----\n 1 files changed, 9 insertions(+), 5 deletions(-)\n\ndiff --git a/submodule.c b/submodule.c\nindex 6f7c210..7d70c4f 100644\n--- a/submodule.c\n+++ b/submodule.c\n@@ -10,17 +10,19 @@ static int add_submodule_odb(const char *path)\n {\n \tstruct strbuf objects_directory = STRBUF_INIT;\n \tstruct alternate_object_database *alt_odb;\n+\tint ret = 0;\n\n \tstrbuf_addf(&objects_directory, \"%s/.git/objects/\", path);\n-\tif (!is_directory(objects_directory.buf))\n-\t\treturn -1;\n-\n+\tif (!is_directory(objects_directory.buf)) {\n+\t\tret = -1;\n+\t\tgoto done;\n+\t}\n \t/* avoid adding it twice */\n \tfor (alt_odb = alt_odb_list; alt_odb; alt_odb = alt_odb->next)\n \t\tif (alt_odb->name - alt_odb->base == objects_directory.len &&\n \t\t\t\t!strncmp(alt_odb->base, objects_directory.buf,\n \t\t\t\t\tobjects_directory.len))\n-\t\t\treturn 0;\n+\t\t\tgoto done;\n\n \talt_odb = xmalloc(objects_directory.len + 42 + sizeof(*alt_odb));\n \talt_odb->next = alt_odb_list;\n@@ -31,7 +33,9 @@ static int add_submodule_odb(const char *path)\n \talt_odb->name[41] = '\\0';\n \talt_odb_list = alt_odb;\n \tprepare_alt_odb();\n-\treturn 0;\n+done:\n+\tstrbuf_release(&objects_directory);\n+\treturn ret;\n }\n\n void show_submodule_summary(FILE *f, const char *path,\n-- \n1.7.0.rc1.141.gd3fd.dirty\n"},{"id":"133193","messageId":"7vaavudqnk.fsf@alter.siamese.dyndns.org","threadId":"22460","inReplyTo":"4B65B345.1090907@web.de","subject":"Re: [PATCH] Fix memory leak in submodule.c","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-31T19:23:59Z","receivedAt":"2010-01-31T19:23:59Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Thanks.\n"}]}