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

[PATCH] bisect--helper: avoid segfault with bad syntax in start --term-.+

From
Carlo Marcelo Arenas Belón <carenas@gmail.com>
Date
May 20, 2020, 19:52 UTC
Message-ID
<20200520195214.62655-1-carenas@gmail.com>

06f5608c14 (bisect--helper: `bisect_start` shell function partially in C, 2019-01-02) adds a lax parser for `git bisect start` which could result in a segfault under a bad syntax call.

Detect if they are enough arguments left in the command line to use for --term-{old,good,new,bad} and throw the same syntax error the old shell script will show if not.

While at it, remove and unnecessary (and incomplete) check for unknown arguments.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
---
 builtin/bisect--helper.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index c1c40b516d..37db7d2afa 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -455,6 +455,8 @@ static int bisect_start(struct bisect_terms *terms, int no_checkout,
 			no_checkout = 1;
 		} else if (!strcmp(arg, "--term-good") ||
 			 !strcmp(arg, "--term-old")) {
+			if (argc - i <= 1)
+				return error(_("'' is not a valid term"));
 			must_write_terms = 1;
 			free((void *) terms->term_good);
 			terms->term_good = xstrdup(argv[++i]);
@@ -465,6 +467,8 @@ static int bisect_start(struct bisect_terms *terms, int no_checkout,
 			terms->term_good = xstrdup(arg);
 		} else if (!strcmp(arg, "--term-bad") ||
 			 !strcmp(arg, "--term-new")) {
+			if (argc - i <= 1)
+				return error(_("'' is not a valid term"));
 			must_write_terms = 1;
 			free((void *) terms->term_bad);
 			terms->term_bad = xstrdup(argv[++i]);
@@ -473,8 +477,7 @@ static int bisect_start(struct bisect_terms *terms, int no_checkout,
 			must_write_terms = 1;
 			free((void *) terms->term_bad);
 			terms->term_bad = xstrdup(arg);
-		} else if (starts_with(arg, "--") &&
-			 !one_of(arg, "--term-good", "--term-bad", NULL)) {
+		} else if (starts_with(arg, "--")) {
 			return error(_("unrecognized option: '%s'"), arg);
 		} else {
 			char *commit_id = xstrfmt("%s^{commit}", arg);
-- 
2.27.0.rc0.187.gede8c892b8
Next: Junio C Hamano
Message 1 of 6 in “bisect--helper: avoid segfault with bad syntax in start --term-.+”
  1. bisect--helper: avoid segfault with bad syntax in start --term-.+Carlo Marcelo Arenas Belón, May 20, 2020
  2. Junio C HamanoMay 20, 2020
  3. Eric SunshineMay 20, 2020
  4. bisect--helper: avoid segfault with bad syntax in `start --term-*`Carlo Marcelo Arenas Belón, May 20, 2020
  5. Christian CouderMay 22, 2020
  6. Junio C HamanoMay 24, 2020

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.