diff options
author | Junio C Hamano <gitster@pobox.com> | 2018-09-24 17:30:48 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-09-24 17:30:48 (GMT) |
commit | bd3941a0aed0756aba43f504d0dea7a3fbe0c82b (patch) | |
tree | 17d9c22f6491f77904aa727ccfc833c9150d441b | |
parent | e3d4ff037db41234eaf74167ab7d1a443c23243d (diff) | |
parent | ad2bf0d9b43433583e88128c278ce31c7ca4e431 (diff) | |
download | git-bd3941a0aed0756aba43f504d0dea7a3fbe0c82b.zip git-bd3941a0aed0756aba43f504d0dea7a3fbe0c82b.tar.gz git-bd3941a0aed0756aba43f504d0dea7a3fbe0c82b.tar.bz2 |
Merge branch 'en/rerere-multi-stage-1-fix'
A corner case bugfix in "git rerere" code.
* en/rerere-multi-stage-1-fix:
rerere: avoid buffer overrun
t4200: demonstrate rerere segfault on specially crafted merge
-rw-r--r-- | rerere.c | 2 | ||||
-rwxr-xr-x | t/t4200-rerere.sh | 29 |
2 files changed, 30 insertions, 1 deletions
@@ -521,7 +521,7 @@ static int check_one_conflict(int i, int *type) } *type = PUNTED; - while (ce_stage(active_cache[i]) == 1) + while (i < active_nr && ce_stage(active_cache[i]) == 1) i++; /* Only handle regular files with both stages #2 and #3 */ diff --git a/t/t4200-rerere.sh b/t/t4200-rerere.sh index 428b3c1..55b7750 100755 --- a/t/t4200-rerere.sh +++ b/t/t4200-rerere.sh @@ -642,4 +642,33 @@ test_expect_success 'rerere with inner conflict markers' ' test_cmp expect actual ' +test_expect_success 'setup simple stage 1 handling' ' + test_create_repo stage_1_handling && + ( + cd stage_1_handling && + + test_seq 1 10 >original && + git add original && + git commit -m original && + + git checkout -b A master && + git mv original A && + git commit -m "rename to A" && + + git checkout -b B master && + git mv original B && + git commit -m "rename to B" + ) +' + +test_expect_success 'test simple stage 1 handling' ' + ( + cd stage_1_handling && + + git config rerere.enabled true && + git checkout A^0 && + test_must_fail git merge B^0 + ) +' + test_done |