Re: [PATCH] add receive.denyNonFastforwards config variable
On Wed, 20 Sep 2006, Jeff King wrote:
Show 20 quoted lines
> 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