From: Eric Wong <e@80x24.org>
Date: Sat, 4 Jan 2020 04:19:33 +0000 (+0000)
Subject: solver: allow literal '\r' character in diff lines
X-Git-Tag: v1.3.0~148
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=aa1e96cd44f6d5cd77a96648ac1f2dbcca9dc367;p=public-inbox.git

solver: allow literal '\r' character in diff lines

While filenames are escaped, the actual diff contents may
contain an unescaped "\r" carriage return byte not in front
of the "\n" line feed.  So just allow "\r" to appear in the
middle of a line.
---

diff --git a/lib/PublicInbox/SolverGit.pm b/lib/PublicInbox/SolverGit.pm
index eab8459b..5ac27988 100644
--- a/lib/PublicInbox/SolverGit.pm
+++ b/lib/PublicInbox/SolverGit.pm
@@ -155,7 +155,7 @@ sub extract_diff ($$) {
 		# the meat of the diff, including "^\\No newline ..."
 		# We also allow for totally blank lines w/o leading spaces,
 		# because git-apply(1) handles that case, too
-		(?:^(?:[\@\+\x20\-\\][^\r\n]*|)$LF)+
+		(?:^(?:[\@\+\x20\-\\][^\n]*|)$LF)+
 	)!smx or return;
 
 	my $di = {
diff --git a/xt/solver.t b/xt/solver.t
index e9f24e7f..4ff57fe7 100644
--- a/xt/solver.t
+++ b/xt/solver.t
@@ -20,6 +20,8 @@ my $app = sub {
 # TODO: convert these to self-contained test cases
 my $todo = {
 	'git' => [
+		'9e9048b02bd04d287461543d85db0bb715b89f8c'
+			.'/s/?b=t%2Ft3420%2Fremove-ids.sed',
 		'eebf7a8/s/?b=t%2Ftest-lib.sh',
 		'eb580ca513/s/?b=remote-odb.c',
 		'776fa90f7f/s/?b=contrib/git-jump/git-jump',