From 4a15758f2ef97970694012cfd6da7c8449bc68c2 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Thu, 26 Jul 2012 00:16:19 +0800 Subject: [PATCH] help.c::uniq: plug a leak We observe that the j-1 element can serve the same purpose as the i-1 element that we use in the strcmp(); it is either: 1. Exactly i-1, when the loop begins (and until we see a duplicate). 2. The same pointer that was stored at i-1 (if it was not a duplicate, and we just copied it into place). 3. A pointer to an equivalent string (i.e., we rejected i-1 _because_ it was identical to j-1). Signed-off-by: Jeff King Signed-off-by: Tay Ray Chuan Signed-off-by: Junio C Hamano --- help.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/help.c b/help.c index 662349dd56..699149201e 100644 --- a/help.c +++ b/help.c @@ -44,9 +44,12 @@ static void uniq(struct cmdnames *cmds) if (!cmds->cnt) return; - for (i = j = 1; i < cmds->cnt; i++) - if (strcmp(cmds->names[i]->name, cmds->names[i-1]->name)) + for (i = j = 1; i < cmds->cnt; i++) { + if (!strcmp(cmds->names[i]->name, cmds->names[j-1]->name)) + free(cmds->names[i]); + else cmds->names[j++] = cmds->names[i]; + } cmds->cnt = j; } -- 2.11.4.GIT