summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerrick Stolee <dstolee@microsoft.com>2018-09-21 15:05:27 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-09-21 18:36:29 (GMT)
commit4067a64672f9db8ca38d5a2682a7cdba7938c18b (patch)
treee688a5d2c6e5ca5c7036fc193ac4f24e2106e1ab
parentb67f6b26e354813d8cd792dcb3eb1a1b60b98a08 (diff)
downloadgit-4067a64672f9db8ca38d5a2682a7cdba7938c18b.zip
git-4067a64672f9db8ca38d5a2682a7cdba7938c18b.tar.gz
git-4067a64672f9db8ca38d5a2682a7cdba7938c18b.tar.bz2
commit-reach: fix memory and flag leaks
The can_all_from_reach_with_flag() method uses 'assign_flag' as a value we can use to mark objects temporarily during our commit walk. The intent is that these flags are removed from all objects before returning. However, this is not the case. The 'from' array could also contain objects that are not commits, and we mark those objects with 'assign_flag'. Add a loop to the 'cleanup' section that removes these markers. Also, we forgot to free() the memory for 'list', so add that to the 'cleanup' section. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--commit-reach.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/commit-reach.c b/commit-reach.c
index e748414..5a84544 100644
--- a/commit-reach.c
+++ b/commit-reach.c
@@ -626,6 +626,11 @@ cleanup:
clear_commit_marks(list[i], RESULT);
clear_commit_marks(list[i], assign_flag);
}
+ free(list);
+
+ for (i = 0; i < from->nr; i++)
+ from->objects[i].item->flags &= ~assign_flag;
+
return result;
}