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

[PATCH 3/6] revert: fix buffer overflow in insn sheet parser

From
Ramkumar Ramachandra <artagnon@gmail.com>
Date
Oct 19, 2011, 21:03 UTC
Message-ID
<1319058208-17923-4-git-send-email-artagnon@gmail.com>
In-Reply-To
<1319058208-17923-1-git-send-email-artagnon@gmail.com>

Check that the commit name argument to a "pick" or "revert" action in '.git/sequencer/todo' is not too long, to avoid overflowing an on-stack buffer. This fixes a regression introduced by 5a5d80f4 (revert: Introduce --continue to continue the operation, 2011-08-04).

Reported-by: Jonathan Nieder <jrnieder@gmail.com>
Acked-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 builtin/revert.c                |    2 +-
 t/t3510-cherry-pick-sequence.sh |   14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/builtin/revert.c b/builtin/revert.c
index acb357d..474dda1 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -705,7 +705,7 @@ static struct commit *parse_insn_line(char *start, struct replay_opts *opts)
 		return NULL;
 
 	q = strchr(p, ' ');
-	if (!q)
+	if (!q || q - p + 1 > sizeof(sha1_abbrev))
 		return NULL;
 	q++;
 
diff --git a/t/t3510-cherry-pick-sequence.sh b/t/t3510-cherry-pick-sequence.sh
index 3bca2b3..2113308 100755
--- a/t/t3510-cherry-pick-sequence.sh
+++ b/t/t3510-cherry-pick-sequence.sh
@@ -12,6 +12,9 @@ test_description='Test cherry-pick continuation features
 
 . ./test-lib.sh
 
+# Repeat first match 10 times
+_r10='\1\1\1\1\1\1\1\1\1\1'
+
 pristine_detach () {
 	git cherry-pick --reset &&
 	git checkout -f "$1^0" &&
@@ -211,4 +214,15 @@ test_expect_success 'malformed instruction sheet 2' '
 	test_must_fail git cherry-pick --continue
 '
 
+test_expect_success 'malformed instruction sheet 3' '
+	pristine_detach initial &&
+	test_must_fail git cherry-pick base..anotherpick &&
+	echo "resolved" >foo &&
+	git add foo &&
+	git commit &&
+	sed "s/pick \([0-9a-f]*\)/pick $_r10/" .git/sequencer/todo >new_sheet &&
+	cp new_sheet .git/sequencer/todo &&
+	test_must_fail git cherry-pick --continue
+'
+
 test_done
-- 
1.7.6.351.gb35ac.dirty
Previous: Ramkumar RamachandraNext: Junio C Hamano
Message 4 of 16 in “Sequencer fixups mini-series”
  1. 0/6 Sequencer fixups mini-seriesRamkumar Ramachandra, Oct 19, 2011
  2. 1/6 revert: free msg in format_todo()Ramkumar Ramachandra, Oct 19, 2011
  3. 2/6 revert: simplify getting commit subject in format_todo()Ramkumar Ramachandra, Oct 19, 2011
  4. 3/6 revert: fix buffer overflow in insn sheet parserRamkumar Ramachandra, Oct 19, 2011
  5. Junio C HamanoOct 20, 2011
  6. Jonathan NiederOct 20, 2011
  7. Ramkumar RamachandraOct 20, 2011
  8. Jonathan NiederOct 20, 2011
  9. Ramkumar RamachandraOct 20, 2011
  10. Junio C HamanoOct 20, 2011
  11. Jonathan NiederOct 20, 2011
  12. Junio C HamanoOct 20, 2011
  13. Ramkumar RamachandraOct 22, 2011
  14. 4/6 revert: make commit subjects in insn sheet optionalRamkumar Ramachandra, Oct 19, 2011
  15. 5/6 revert: allow mixed pick and revert instructionsRamkumar Ramachandra, Oct 19, 2011
  16. 6/6 revert: simplify communicating command-line argumentsRamkumar Ramachandra, Oct 19, 2011

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.