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

[PATCH 2/3] check-ref-format --branch: strip refs/heads/ using skip_prefix

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Oct 17, 2017, 07:10 UTC
Message-ID
<20171017071000.ms2jearljljhxtgm@aiede.mtv.corp.google.com>
In-Reply-To
<20171017070619.bdgvujmbw4uxvwle@aiede.mtv.corp.google.com>
From: Junio C Hamano <gitster@pobox.com>

The expansion returned from strbuf_check_branch_ref always starts with "refs/heads/" by construction, but there is nothing about its name or advertised API making that obvious. This command is used to process human-supplied input from the command line and is usually not the inner loop, so we can spare some cycles to be more defensive. Instead of hard-coding the offset strlen("refs/heads/") to skip, verify that the expansion actually starts with refs/heads/.

[jn: split out from a larger patch, added explanation]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 builtin/check-ref-format.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/builtin/check-ref-format.c b/builtin/check-ref-format.c
index 6c40ff110b..bc67d3f0a8 100644
--- a/builtin/check-ref-format.c
+++ b/builtin/check-ref-format.c
@@ -39,12 +39,14 @@ static char *collapse_slashes(const char *refname)
 static int check_ref_format_branch(const char *arg)
 {
 	struct strbuf sb = STRBUF_INIT;
+	const char *name;
 	int nongit;
 
 	setup_git_directory_gently(&nongit);
-	if (strbuf_check_branch_ref(&sb, arg))
+	if (strbuf_check_branch_ref(&sb, arg) ||
+	    !skip_prefix(sb.buf, "refs/heads/", &name))
 		die("'%s' is not a valid branch name", arg);
-	printf("%s\n", sb.buf + 11);
+	printf("%s\n", name);
 	strbuf_release(&sb);
 	return 0;
 }
-- 
2.15.0.rc1.287.g2b38de12cc
Previous: Jonathan NiederNext: Junio C Hamano
Message 21 of 36 in “bug with check-ref-format outside of repository”
  1. Marko KunglaJul 8, 2017
  2. Jeff KingJul 14, 2017
  3. check-ref-format: require a repository for --branchJeff King, Jul 14, 2017
  4. Jonathan NiederJul 17, 2017
  5. Marko KunglaJul 17, 2017
  6. Jeff KingAug 17, 2017
  7. Jeff KingAug 17, 2017
  8. Junio C HamanoAug 17, 2017
  9. Jeff KingAug 18, 2017
  10. Junio C HamanoAug 18, 2017
  11. Junio C HamanoOct 16, 2017
  12. Junio C HamanoOct 16, 2017
  13. Jeff KingOct 16, 2017
  14. Jonathan NiederOct 16, 2017
  15. Junio C HamanoOct 17, 2017
  16. Jeff KingOct 17, 2017
  17. Junio C HamanoOct 17, 2017
  18. Junio C HamanoOct 17, 2017
  19. 0/3 Re: [PATCH] check-ref-format: require a repository for --branchJonathan Nieder, Oct 17, 2017
  20. 1/3 check-ref-format --branch: do not expand @{...} outside repositoryJonathan Nieder, Oct 17, 2017
  21. 2/3 check-ref-format --branch: strip refs/heads/ using skip_prefixJonathan Nieder, Oct 17, 2017
  22. Junio C HamanoOct 17, 2017
  23. Jonathan NiederOct 17, 2017
  24. Junio C HamanoOct 17, 2017
  25. 3/3 check-ref-format doc: --branch validates and expands <branch>Jonathan Nieder, Oct 17, 2017
  26. Junio C HamanoOct 17, 2017
  27. Jonathan NiederOct 17, 2017
  28. Jeff KingOct 18, 2017
  29. Kevin DaudtOct 17, 2017
  30. Junio C HamanoOct 17, 2017
  31. Kevin DaudtOct 17, 2017
  32. Jeff KingOct 16, 2017
  33. Jonathan NiederOct 17, 2017
  34. Junio C HamanoOct 17, 2017
  35. Jonathan NiederOct 17, 2017
  36. Jonathan NiederOct 17, 2017

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.