[PATCH next] branch.c: if remote is not config'd for branch, don't try delete push config
- From
Brandon Casey <casey@nrlssc.navy.mil>
- Date
- Jul 16, 2009, 21:26 UTC
- Message-ID
- <W0GiRm9n1NEO0ox1puhqZPKGDpWW0rbH6Cp2gxr7ofSuhyo4HCl88lyU5dRIkYdZUK1rEnxQExw@cipher.nrlssc.navy.mil>
From: Brandon Casey <drafnel@gmail.com>
If a remote is not configured for the branch configuration being deleted, then don't try to delete the remote.<remote>.push configuration for the branch. When the remote is not configured, branch->remote_name is not filled in. When this NULL branch->remote_name is passed to strbuf_addf() it will result in an attempt to remove a bogus configuration statement in the best case (i.e. "remote.(null).push" for platforms which guard against supplying NULL to a %s conversion spec) and a segfault in the worst case.
So check whether branch->remote_name is non-NULL before trying to use it.
Signed-off-by: Brandon Casey <drafnel@gmail.com> --- branch.c | 17 ++++++++++------- 1 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/branch.c b/branch.c index dfde568..6dc9175 100644 --- a/branch.c +++ b/branch.c @@ -116,13 +116,16 @@ void delete_branch_config (const char *name) /* git config --unset-all remote.foo.push ^\+?refs/heads/bar: */ branch = branch_get(name + 11); - strbuf_addf(&buf, "remote.%s.push", branch->remote_name); - strbuf_addstr(&push_re, "^\\+?"); - strbuf_addstr_escape_re(&push_re, name); - strbuf_addch(&push_re, ':'); - if (git_config_set_multivar(buf.buf, NULL, push_re.buf, 1) < 0) { - warning("Update of config-file failed"); - goto fail; + if (branch->remote_name) { + strbuf_addf(&buf, "remote.%s.push", branch->remote_name); + strbuf_addstr(&push_re, "^\\+?"); + strbuf_addstr_escape_re(&push_re, name); + strbuf_addch(&push_re, ':'); + if (git_config_set_multivar(buf.buf, NULL, push_re.buf, 1) < 0) + { + warning("Update of config-file failed"); + goto fail; + } } strbuf_reset(&buf); strbuf_addf(&buf, "branch.%s", name + 11);
-- 1.6.3.1.24.g152f4