Johannes Sixt <j6t@xxxxxxxx> writes: > Using 'git rerere forget .' after a merge that involved binary files > runs into an infinite loop if the binary file contains a zero byte. > Replace a strchrnul by memchr because the former does not make progress > as soon as the NUL is encountered. Hmph, thanks. Is it the right behaviour for rerere to even attempt to interfere with a merge that involves binary files in the first place? Does the three-way merge machinery replay recorded resolution for such a binary file correctly (after your fix, that is)? > diff --git a/rerere.c b/rerere.c > index a6a5cd5..4d940cd 100644 > --- a/rerere.c > +++ b/rerere.c > @@ -284,8 +284,10 @@ static int rerere_mem_getline(struct strbuf *sb, struct rerere_io *io_) > strbuf_release(sb); > if (!io->input.len) > return -1; > - ep = strchrnul(io->input.buf, '\n'); > - if (*ep == '\n') > + ep = memchr(io->input.buf, '\n', io->input.len); > + if (!ep) > + ep = io->input.buf + io->input.len; > + else if (*ep == '\n') > ep++; > len = ep - io->input.buf; > strbuf_add(sb, io->input.buf, len); > diff --git a/t/t2030-unresolve-info.sh b/t/t2030-unresolve-info.sh > index f262065..0b699f5 100755 > --- a/t/t2030-unresolve-info.sh > +++ b/t/t2030-unresolve-info.sh > @@ -44,9 +44,13 @@ prime_resolve_undo () { > > test_expect_success setup ' > mkdir fi && > + printf "a\0a" >binary && > + git add binary && > test_commit initial fi/le first && > git branch side && > git branch another && > + printf "a\0b" >binary && > + git add binary && > test_commit second fi/le second && > git checkout side && > test_commit third fi/le third && > @@ -167,4 +171,12 @@ test_expect_success 'rerere and rerere forget (subdirectory)' ' > test_cmp expect actual > ' > > +test_expect_success 'rerere forget (binary)' ' > + git checkout -f side && > + printf "a\0c" >binary && > + git commit -a -m binary && > + test_must_fail git merge second && > + git rerere forget binary > +' > + > test_done -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html