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 8, 2011, 17:36 UTC
Message-ID
<1318095407-26429-4-git-send-email-artagnon@gmail.com>
In-Reply-To
<1318095407-26429-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>
---
 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 b3c5e0e..6451089 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -707,7 +707,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.4.1
Previous: Ramkumar RamachandraNext: Ramkumar Ramachandra
Message 4 of 16 in “Sequencer fixups mini-series”
  1. 0/6 Sequencer fixups mini-seriesRamkumar Ramachandra, Oct 8, 2011
  2. 1/6 revert: Free memory after get_message callRamkumar Ramachandra, Oct 8, 2011
  3. 2/6 revert: Simplify getting commit subjectRamkumar Ramachandra, Oct 8, 2011
  4. 3/6 revert: Fix buffer overflow in insn sheet parserRamkumar Ramachandra, Oct 8, 2011
  5. 4/6 revert: Make commit descriptions in insn sheet optionalRamkumar Ramachandra, Oct 8, 2011
  6. Junio C HamanoOct 10, 2011
  7. Junio C HamanoOct 12, 2011
  8. Ramkumar RamachandraOct 17, 2011
  9. 5/6 revert: Allow mixed pick and revert instructionsRamkumar Ramachandra, Oct 8, 2011
  10. 6/6 revert: Simplify passing command-line arguments aroundRamkumar Ramachandra, Oct 8, 2011
  11. Tay Ray ChuanOct 9, 2011
  12. Ramkumar RamachandraOct 9, 2011
  13. Jonathan NiederOct 9, 2011
  14. Ramkumar RamachandraOct 9, 2011
  15. Jonathan NiederOct 9, 2011
  16. Ramkumar RamachandraOct 17, 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.