Re: [PATCH] add receive.denyNonFastforwards config variable

From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Date: 2006-09-21 10:07:19
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@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Thu Sep 21 10:07:30 2006

This archive was generated by hypermail 2.1.8 : 2006-09-21 10:08:16 EST