git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[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
Next: Jeff King
Message 1 of 2 in “branch.c: if remote is not config'd for branch, don't try delete push config”
  1. branch.c: if remote is not config'd for branch, don't try delete push configBrandon Casey, Jul 16, 2009
  2. Jeff KingJul 17, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.