On Wed, 20 Sep 2006, Jeff King wrote: > On Thu, Sep 21, 2006 at 01:07:54AM +0200, Johannes Schindelin wrote: > > > + if (deny_non_fast_forwards && !is_null_sha1(old_sha1)) { > > + struct commit *old_commit, *new_commit; > > + struct commit_list *bases; > > + > > + old_commit = (struct commit *)parse_object(old_sha1); > > + new_commit = (struct commit *)parse_object(new_sha1); > > + for (bases = get_merge_bases(old_commit, new_commit, 1); > > + bases; bases = bases->next) > > + if (!hashcmp(old_sha1, bases->item->object.sha1)) > > + break; > > + if (!bases) > > + return error("denying non-fast forward;" > > + " you should pull first"); > > + } > > Memory leak on 'bases'. It shouldn't matter much because the program is > short-lived, but I couldn't remember if we have a policy on such things > with increasing lib-ification. True. How about this: -- snip -- --- receive-pack.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/receive-pack.c b/receive-pack.c index a6ec9f9..d84fc2c 100644 --- a/receive-pack.c +++ b/receive-pack.c @@ -131,17 +131,19 @@ static int update(struct command *cmd) } if (deny_non_fast_forwards && !is_null_sha1(old_sha1)) { struct commit *old_commit, *new_commit; - struct commit_list *bases; + struct commit_list *bases, *backup; old_commit = (struct commit *)parse_object(old_sha1); new_commit = (struct commit *)parse_object(new_sha1); - for (bases = get_merge_bases(old_commit, new_commit, 1); + backup = get_merge_bases(old_commit, new_commit, 1); + for (bases = backup; bases; bases = bases->next) if (!hashcmp(old_sha1, bases->item->object.sha1)) break; if (!bases) return error("denying non-fast forward;" " you should pull first"); + free_commit_list(backup); } safe_create_leading_directories(lock_name); -- 1.4.2.1.g6ad2-dirty - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html