* Bernhard R. Link <brl...@debian.org> [190330 07:58]:
> I'm looking into #901952 (pristine-tar failing to checkout out old files
> with non-printable unicode characters) and think that might be solved
> with the attached patches, by calling tar with --null and giving it
> a copy of the manifest file that is unescaped and NUL-terminated.
> 
> What I haven't looked into yet is whether it will break files
> generated with 1.46, as that the format incompatibly without
> changing the version of the delta (though perhaps that can be
> mitigated by an additional variant at checkout time).
> 
> What are your opinions on that? Is this worth trying to get into buster?

Attached version with some small fixes, more tests convering those
changes (and compatibility with previous versions), and an additional
variant run on checkout time to also handle files commited with 1.46.

        Bernhard R. Link
-- 
F8AC 04D5 0B9B 064B 3383  C3DA AFFC 96D1 151D FFDC
>From c26122199aca7c2e08a8597d700d66b8734a3ad6 Mon Sep 17 00:00:00 2001
From: "Bernhard R. Link" <brl...@debian.org>
Date: Fri, 29 Mar 2019 22:32:13 +0100
Subject: [PATCH 1/6] revert writing unquoted filenames to manifest

this caused the filename to be unquoted two times,
break with filenames containing newlines
and changed the semantics of manifest files without changing the format version
---
 pristine-tar | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pristine-tar b/pristine-tar
index 0fe132e..fe10340 100755
--- a/pristine-tar
+++ b/pristine-tar
@@ -664,7 +664,7 @@ sub genmanifest {
     chomp;
     # ./ or / in the manifest just confuses tar
     s/^\.?\/+//;
-    print OUT unquote_filename($_) . "\n" if length $_;
+    print OUT $_ . "\n" if length $_;
   }
   close IN;
   close OUT;
-- 
2.20.1

>From bf607f0cd6de861a461eec9f60998950267001ab Mon Sep 17 00:00:00 2001
From: "Bernhard R. Link" <brl...@debian.org>
Date: Fri, 29 Mar 2019 22:44:25 +0100
Subject: [PATCH 2/6] change unquoting to match how tar quotes the filenames

Tar also generates octal escape sequences (\123) for some unicode
characters, especially when run in a non-unicode locale like with
LC_ALL=C. Those were not yet unquoted.

Vertical tab was unquoted improperly \x11 instead of \x0b.

If there was a literal backslash in a filename followed by
a character like a, b, n, r, t, v, then tar escapes that to
e.g. \\b. The old unquote the \b it saw in that, which this
fixes.

With those changes the unquote matches what tar uses, which
is a prerequisite for giving tar the unquoted filenames
to work around the behaviour change in tar 1.30.

Compared to versions <= 1.45 this does not change the result
of recreating a tar (so ensures every delta produced by those
is still useable) and only make pristine-tar able to handle
more tarballs. (As unquote in those were only used to create
dummy files for missing files in git, while tar was given
the original manifest file ignoring wrongly unquoted files).

As 1.46 wrote unquoted files to the manifest, this commit
breaks using some delta files created with 1.46. A later
commit will add a compatibility step for those.
---
 pristine-tar | 28 ++++++++++++++++++++--------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/pristine-tar b/pristine-tar
index fe10340..f6754c8 100755
--- a/pristine-tar
+++ b/pristine-tar
@@ -362,15 +362,27 @@ Options:
 sub unquote_filename {
   my $filename = shift;
 
-  $filename =~ s/\\a/\a/g;
-  $filename =~ s/\\b/\b/g;
-  $filename =~ s/\\f/\f/g;
-  $filename =~ s/\\n/\n/g;
-  $filename =~ s/\\r/\r/g;
-  $filename =~ s/\\t/\t/g;
-  $filename =~ s/\\v/\x11/g;
-  $filename =~ s/\\\\/\\/g;
+  my $unquote_character = sub {
+    if (defined $2 and $2 eq "000") {
+      die "filenames with NUL bytes are not supported";
+    }
+    return pack("C", oct($2)) if defined $2;
+    my %map_named_escapes = (
+        a => "\a",
+        b => "\b",
+        f => "\f",
+        n => "\n",
+        r => "\r",
+        t => "\t",
+        v => "\x0b",
+        "\\" => "\\",
+    );
+    return $map_named_escapes{$1};
+  };
 
+  # unquote by calling $unquote_character for each matched group:
+  # (do all in a single run, as the octal sequences might output anything)
+  $filename =~ s/\\([abfnrtv\\])|\\([0-7]{3})/$unquote_character->()/ge;
   return $filename;
 }
 
-- 
2.20.1

>From c4d5609decd4b81285e92950a343b822e21608dc Mon Sep 17 00:00:00 2001
From: "Bernhard R. Link" <brl...@debian.org>
Date: Fri, 29 Mar 2019 22:56:52 +0100
Subject: [PATCH 3/6] send manifests file to tar NUL-terminated and unquoted
 (Closes: #901952)

tar changed behavior in no longer unescaping filenames with --verbatim-files-from
breaking reading all delta files and handling files with such filenames.

(This also fixes #902115 properly this time).
---
 pristine-tar | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/pristine-tar b/pristine-tar
index f6754c8..1c6e02e 100755
--- a/pristine-tar
+++ b/pristine-tar
@@ -396,12 +396,14 @@ sub recreatetarball {
 
   my @manifest;
   open(IN, "<", $manifestfile) || die "$manifestfile: $!";
+  open(OUT, ">", "$tempdir/manifest") || die "$tempdir/manifest: $!";
   while (<IN>) {
     chomp;
     push @manifest, $_;
+    print OUT unquote_filename($_) . pack("C", 0);
   }
   close IN;
-  link($manifestfile, "$tempdir/manifest") || die "link $tempdir/manifest: $!";
+  close OUT;
 
   # The manifest and source should have the same filenames,
   # but the manifest probably has all the files under a common
@@ -528,7 +530,7 @@ sub recreatetarball_helper {
     0,                "--numeric-owner",
     "-C",             "$tempdir/workdir",
     "--no-recursion", "--mode",
-    "0644",           "--verbatim-files-from",
+    "0644",           "--null",
     "--files-from",   "$tempdir/manifest"
   );
   if (exists $options{tar_format}) {
-- 
2.20.1

>From e780486dac93da865c964256add9f9eafcde8190 Mon Sep 17 00:00:00 2001
From: "Bernhard R. Link" <brl...@debian.org>
Date: Sun, 31 Mar 2019 01:14:18 +0100
Subject: [PATCH 4/6] add more testcases for unquoting of filenames

espcially testing if deltas of old version can still be used
---
 test/samples/bundles/doublebackslash.bundle | Bin 0 -> 3434 bytes
 test/samples/bundles/escaping.bundle        | Bin 0 -> 20668 bytes
 test/samples/bundles/newlines.bundle        | Bin 0 -> 2183 bytes
 test/samples/bundles/simpleescapes.bundle   | Bin 0 -> 2660 bytes
 test/samples/bundles/unicode.bundle         | Bin 0 -> 6753 bytes
 test/samples/bundles/verticaltab.bundle     | Bin 0 -> 1408 bytes
 test/samples/tarballs/actualbackslash.tar   | Bin 0 -> 10240 bytes
 test/samples/tarballs/doublebackslash.tar   | Bin 0 -> 10240 bytes
 test/samples/tarballs/newlines.tar          | Bin 0 -> 10240 bytes
 test/samples/tarballs/simpleescapes.tar     | Bin 0 -> 10240 bytes
 test/samples/tarballs/unicode.tar           | Bin 0 -> 10240 bytes
 test/samples/tarballs/verticaltab.tar       | Bin 0 -> 10240 bytes
 test/test_recreate.sh                       |  53 ++++++++++++++++++++
 test/test_roundtrip.sh                      |  26 ++++++++++
 14 files changed, 79 insertions(+)
 create mode 100644 test/samples/bundles/doublebackslash.bundle
 create mode 100644 test/samples/bundles/escaping.bundle
 create mode 100644 test/samples/bundles/newlines.bundle
 create mode 100644 test/samples/bundles/simpleescapes.bundle
 create mode 100644 test/samples/bundles/unicode.bundle
 create mode 100644 test/samples/bundles/verticaltab.bundle
 create mode 100644 test/samples/tarballs/actualbackslash.tar
 create mode 100644 test/samples/tarballs/doublebackslash.tar
 create mode 100644 test/samples/tarballs/newlines.tar
 create mode 100644 test/samples/tarballs/simpleescapes.tar
 create mode 100644 test/samples/tarballs/unicode.tar
 create mode 100644 test/samples/tarballs/verticaltab.tar
 create mode 100644 test/test_recreate.sh

diff --git a/test/samples/bundles/doublebackslash.bundle b/test/samples/bundles/doublebackslash.bundle
new file mode 100644
index 0000000000000000000000000000000000000000..71200d56790709f206278d4102140408efa0d886
GIT binary patch
literal 3434
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

literal 0
HcmV?d00001

diff --git a/test/samples/bundles/escaping.bundle b/test/samples/bundles/escaping.bundle
new file mode 100644
index 0000000000000000000000000000000000000000..7be281042bb5cb6f508945c21c2e6147737a982f
GIT binary patch
literal 20668
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
J_T4qoe*jK5G-?0<

literal 0
HcmV?d00001

diff --git a/test/samples/bundles/newlines.bundle b/test/samples/bundles/newlines.bundle
new file mode 100644
index 0000000000000000000000000000000000000000..af95e7dc217dca5b1f13e38ac5840f4bd5d06306
GIT binary patch
literal 2183
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

literal 0
HcmV?d00001

diff --git a/test/samples/bundles/simpleescapes.bundle b/test/samples/bundles/simpleescapes.bundle
new file mode 100644
index 0000000000000000000000000000000000000000..19f371317f5fa0db60a08ba6493403fccd99adb5
GIT binary patch
literal 2660
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
Xg$_f8^hapm$blzf10K!rD#Skl&mh!C

literal 0
HcmV?d00001

diff --git a/test/samples/bundles/unicode.bundle b/test/samples/bundles/unicode.bundle
new file mode 100644
index 0000000000000000000000000000000000000000..517f5c8930295154f43f7c20cfadb953adf140bd
GIT binary patch
literal 6753
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

literal 0
HcmV?d00001

diff --git a/test/samples/bundles/verticaltab.bundle b/test/samples/bundles/verticaltab.bundle
new file mode 100644
index 0000000000000000000000000000000000000000..e5e8d176d5b5c7878300adab7155deb5f38a916c
GIT binary patch
literal 1408
zcma)6S5%V+6#f$kVu)n~l~$2B2#Ku!PY6j^GJ}zbEGG^!84^|iL5ea8G@?>b)MzR)
z^c2M4fR-Q#2_RshBp5Xy$_A@)f<Qs5km6|{`p}0y+=uU+Z`|{pbMIzMG654FnTTN}
z#c-mzNER0)lQ~R~%4R}jDuKx55V%Z`OCS><2Z+mIQ>i2}iOi;A61Y5peFT@u5!myY
zf<$ftl1=8YAO{waOeC?Fc@9htg#+=Hkt31CA~D$%HW%bVAm`uGxP(YSVq^^0Hj$a|
z|FgIIcz7d`0Ulm{006+3NB<HkMO@VFhlE2$KFZWRfdXjDnBgWn&-R`5!Lkf~Ub*h2
zSiY=pym?gV{#{6AXziH_mPc^D<E`q@%4be%gHZ3b9^iW~DQ3;$+Ue7mDMOxO^5==h
zrhu6C6No7>9nyO{TwW8Dl@#m!LE}HC#MY9p;SF&jLWrBDCL(fC-od;uX0&b5#5J_&
z%PRSyNI7T(Xa%Ph*KXn8$HI&aOIE0>LciJGUnnUU4J{ZN1iK>8un9$h?2mMoCeIWM
zV{z;`i!FhzICJXR+-pv@t77iq2gs3e&&;c5O6u28XM*e%8^3~dT{f<d4!_;U@2;HD
zgzKMJ-EiOEeY)_bs3IdM%SFTM^5Ipo9;RVk85MddVxj{G5}`mGPDoY}p?rI~4V-X#
z)m#Ru@q$WR=$$)}W1VJaY99Av)TgES%+^lP^Oi1)btB3mkz7&j)<y{mPm;R|XF5~s
z@nWr7atIDoZo;<Q$ES#4=i$+d7Ww+Xsn5j+0UhfKo9*1|5D37DXtWVOA|~p4hF9jw
z?2@}ep;RgrohvcU&Me6+DS@)HV7JZn;5XVVg+53mita;Ad1_o}Q3||Hm1HKj;LIoi
z;&Tz4s67X-_<1?&kDm-n_U+N~csI*F7H?>7ZB{pf-3me{rcH(G!?pD)1_l(ZHY5_2
z+SbvlQ1pVfmThYFCZ)=yZGfPp^vOF+&GxQ&gvVCU@w`W6IqeEPd<E4~=<suPz!I6{
zNbAwk9?`yd5A_dkMpZGQ5SH(Ak7If7o9_UBca^?asv0X*wHAh8tniSPZ}INyb@W-d
zj-YH8W^}{TI3c#DX=1l=pgViX;AJ9*6~GyT-TM?y`7O2iwd{`5MVY7kfz2fL(%{+s
zS9|OSy6zpQ9XS@ACCZw#aBG)q5`r&M>;|>7HwII^VsvKF(&6WC_ad%I=j<k>{m1FH
zou!wjl7u_I4c?QMF1lKtOxt+!&_w^Mylp+>$8BG%Rz;fp(lDpIWs%S=n1$ORoZh8v
zc#b~w=MTfxdXxCn(S42e43WXEuMviaB|8|60_~fsRqd6rh{eXn(8|ueuV|FVIlqE+
zTZZ)5+QwV+@qtgseQuPY+$Yv32`cw4N{m`R@?u=AD;aOl9+`VJ)%-B2;IW23>>Pix
z!n|j8EXl*lruq%PNIL)W0}nX*aYY{NOo)kl4C^rOKveun+bN8CX$3F2=5uTei*iN#
zJ8VZr{E@02M9Jfz{2hezXo0Su$$6UfyfG{z@UU1^>>KQ?zo3O?nnc49pNj3mYGB)t
zG#SneQ5I%;Ix7(T572@Jfb4Kj8h`@;r`0Z%Qh16OA(I&c7=4{PO;2$0+S59_7c6An
zrLOh+4b<IXHJ){(_y)p^Bw_r+w5Ngd^<@DO0^m7?s*yrg?i=5z&h&i7y6%3fMoj~H
ze@9q*tqxG%kIMY%3-O<u^0VFA$?)$QwxcsxDUJ)ucRSZsQ`3$el~@<l$G@iUn)U`r
k3&wL`idbj)M**;p{=I|K7wXKK_Hh~IgTncqquvkx0=j>90ssI2

literal 0
HcmV?d00001

diff --git a/test/samples/tarballs/actualbackslash.tar b/test/samples/tarballs/actualbackslash.tar
new file mode 100644
index 0000000000000000000000000000000000000000..3ae7a0a8c2eabe88ef2dad90ff4d7300d502d8c7
GIT binary patch
literal 10240
zcmeH|%}&EG499ckDR={#&vpmi1gUbmbR4<{bwT3sae83TN<*27n6$qyZezzuevace
z`e+YB^fa`uf%ah%+e^jboD*5IEHxXAklI+bDQ7I(rLj_q!}eQQM|?jens~`6#<aGc
zM}D)<NBefT^URz6vg)ym$72}NGs(*Mozx9gjqepv-`Cz&JKJ@J>b}u?<$@yfaMK6E
z=86c6F_90$@KiLb%sH1vUFW)<WvTPvvi_B`R@ky-uJgY0`v1y*3a9i(mmnv&F#p<V
zgZy82ql;$!%s>CN)V|~gp(x5_=bV4XJw9uerRH|Os(&~8T@JgA_0H?Ri(}&EkDk8G
yZ9)_f009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009vAHv*qN_jVNk

literal 0
HcmV?d00001

diff --git a/test/samples/tarballs/doublebackslash.tar b/test/samples/tarballs/doublebackslash.tar
new file mode 100644
index 0000000000000000000000000000000000000000..7b3d04b4b2c486dbdb0ef7f8988c477223067226
GIT binary patch
literal 10240
zcmeH~U2cOg49D}lQ|tyK-|(=TR6?O-bQ&!aq|%N*r`=QpQm3FSW5Rhc#7Rv4_D>1#
z=A&%dt}<<Tu%@;>iQh74N-5$kw5bKBAe0LUKFTu=ekz34q>2A2^A*p7Gd+atyUxwM
zx1OK;m#vL9cbmEDC&?c7-SKEo?z!N#wlvEmSA|uTeqqKGd0tqnEvuj}XLSXG9#*{}
z{J0<m>h4^%_9<vi=wOeA)^f`I_q%sb`DdI;B0~c$8NYG<zw+<w;C`(L7UZ8ZEinH}
z>N#-EIR91W4!d3HP2ei`hx`01IODyAHnq^jru<8|0FdndvT?i{=U?Dy9;c4}=_)h+
z<KutfJ(Pb=;XfdSrW@y<BmXI?Y_&1Q{9m8_4Z!T*hSm&`t^xkg59D8Ie_u$U+Q#{(
z$bX6|TWyRn|HJF4Y3&vNc=VGc=f4sX`A<<a4EawXGsZv#Pyti`6+i`00aO4LKm||%
QQ~(t~1yBK0;LjBJ1TM<RQUCw|

literal 0
HcmV?d00001

diff --git a/test/samples/tarballs/newlines.tar b/test/samples/tarballs/newlines.tar
new file mode 100644
index 0000000000000000000000000000000000000000..02c3a260a1cf56c2912dd3769100089637c85bcc
GIT binary patch
literal 10240
zcmeIz&5nXF5C`y{eG1=T`#sCSgHK{A6g2_6K{P(TZOn$G9yT>@Lc)J81%?6oYo`3T
z`|i+%z3X;I?;1a_&j*iTtz~J9k&iK{nNV62k<?npywFBTcKH0Kygu=I8Ql<HIfO92
zW~VEE<)3q#CO1{i`pC$29s1s%$4yhas@)4BVU6OdRdpkzq}H_DRq^~=C|*?!t!6zT
zd|Z)$zn!|(S5Zmv&8anrOy2ju=P8}{zvP;jDSp!%1q<*0=lWkl@5kfm{69NxT3{RZ
z_%z1IN0F{&`@bR+{}*p8XK~5G*MEyxv_Nscpa238fB*y_009U<00Izz00bZa0SG_<
X0uX=z1Rwwb2tWV=5P$##W-0Ih#pTxL

literal 0
HcmV?d00001

diff --git a/test/samples/tarballs/simpleescapes.tar b/test/samples/tarballs/simpleescapes.tar
new file mode 100644
index 0000000000000000000000000000000000000000..1290d7d9b83b24762fede9616b0d024d1e22c222
GIT binary patch
literal 10240
zcmeIy-D<-i6bEqcwvO!`_5x)ZJ(^tXO$NnI(_OU9NFD6)ckCDedl96C75YCnCLTY3
zqM!bIwb>49zg>MqAL1x3ACkjbD{{$EmYg&~X=9wT<gDYoGGvU{Tz)C1BYqu{A9>1g
z7}9BWs+r6G?rqxK)bpypsCj-LcDuMwuVi{FL*HB9S>3gYbPU@0wF=b8u5EpAQE@z6
z^@gyxDuEOa>7}YiedByJoTKvI|NZB5dH);9?*P?LRo~;r@Bi`q@9rO;7H`Y^T@N_l
zBOkEkH$ImfWqGVC-hbVY5^{d%^IP2b`JWGn5g-5o2tWV=5P$##AOHafKmY;|fB*y_
Z009U<00Izz00bZa0SG_<0ucCbfgfBsQ@j8G

literal 0
HcmV?d00001

diff --git a/test/samples/tarballs/unicode.tar b/test/samples/tarballs/unicode.tar
new file mode 100644
index 0000000000000000000000000000000000000000..063f6c85702f27319101a5b87a9048ab4360b205
GIT binary patch
literal 10240
zcmeH~PjAyO6u@)lQ{)4XV#kTo3h_x0s=U}8)!L+TQ&e$k4`WjfhyxOW6M_R1f~jK%
zHn!7tDj?zBk~?VdEpUWbw3ht|Yf#airRX_%_KW>{e(%X0)~_$O!X?(K-xZ7tY0SSN
z-6*9-CUu*ZTIm>=IF9Fegkqxg*l`Iqmgm2eS&O}H#H9YE48v$vn}0b^|7&mg=JJ^f
z-E(cz58G`KM7Ov@eO@D|hC~ff#HzSPs)#pi#9XR-gf*C5_0hG3-ViLV5P=4lVUu@-
zyeFiEE2u(m6q<jL!C7c{o;w})zuz<UO#It~816-kUv|tDkN-dTKN8)jJI_<_7yfsN
zJ}=<^%O39Y=b!5TCC05@(DXwttS^JZwZpZehoi51FMkZ49X;Oo_V$UTwkEOKQ`>4Z
z8BB)igW9o@-DE4-NMl@Kot5LCXa1+U#%EHuX^FFMC+ok19jwP4TPU$}#pAz3vS9i@
zAaH8@OVJ7ER0Oi1FIfL6acs!{|KR-e<o#yHx@oHCI*qTYeKq<#yl&o><465Z>unZ%
zd^dg_jGs2{n8|h;>+Jp}jq6%$rmM-T^g$ZyXFVO7-$ySF-k-?&`QkJGpOOC&vhj5O
zr^MCuA~#W9udMukW?+@KouZcgFo^W!&lG*X)#HN0<*q0}7!L%101yBIKmZ5;0U!Vb
bfB+Bx0zd!=00AHX1b_e#00KZ@@d*3`PyrC4

literal 0
HcmV?d00001

diff --git a/test/samples/tarballs/verticaltab.tar b/test/samples/tarballs/verticaltab.tar
new file mode 100644
index 0000000000000000000000000000000000000000..8d1c604312061d23c4104c7fd21dc9819bb8000b
GIT binary patch
literal 10240
zcmeIyT}s3-5C`x)>m|H_Nt$%XgJ)UNbXbM1l{SjUcj6+2>_h2NaAE&>nYPn>{lerU
zejkp**u~-S%CYB3?ccPtwry33(&{Klr%dA<5qYv+^2Ygw)N%i%T#ooT=Qzof(>UhK
z?DAzTf8N`&xuxe#KY9C<#?y)4^GnB?sE<0NXeii*d&^O?C2O4FK84`rd{TJ0=?!6V
zn*=h?d4As1W%JLaG^Diay8nAG>AL={bzb?+GhNZ)&g=ht{$D)hw-krR9J?zFSGtq~
zZsm?IQCb~;zt#7@Bct@nxVxn9{QP$@#2^rW00bZa0SG_<0uX=z1Rwwb2tWV=5P$##
WAOHafKmY;|fB*y_009X6tH2MuC07^#

literal 0
HcmV?d00001

diff --git a/test/test_recreate.sh b/test/test_recreate.sh
new file mode 100644
index 0000000..e6d4b5a
--- /dev/null
+++ b/test/test_recreate.sh
@@ -0,0 +1,53 @@
+. $(dirname $0)/helper.sh
+
+assertCanRecreate() {
+  local bundle="$1"
+  local name="${bundle%.bundle}"
+
+  cd "$TMPDIR"
+  silent_run git clone "$SAMPLES/bundles/$bundle" "$name"
+  cd "$name"
+  silent_run git config user.name 'Test User'
+  silent_run git config user.email 't...@example.com'
+
+  for tarball in $(git ls-tree origin/pristine-tar | sed -n -e 's/.*\t\(.*\)\.id$/\1/p') ; do
+    echo "checking if '${name}.tar' can be created from '${tarball}.delta'..."
+    assertSuccess pristine-tar checkout "$tarball"
+    assertHashEquals "$SAMPLES/tarballs/${name}.tar" "$tarball"
+  done
+}
+
+test_recreate_with_simpleescapes() {
+  # check if a tar with \a \b \f \r \t and single backslash in filenames
+  # can be created from deltas produces with old versions:
+  assertCanRecreate simpleescapes.bundle
+}
+
+test_recreate_with_newlines() {
+  # check if a tar with newlines in filenames can be created from old deltas:
+  # (note 1.46 cannot handle that file, so no delta for that version)
+  assertCanRecreate newlines.bundle
+}
+
+test_recreate_with_unicode() {
+  # check if a tar with unicode in filenames can be recreated from old deltas:
+  # there are deltas created with LC_ALL=C and with LC_ALL=en_US.utf8, as
+  # the first causes octal escapes in the manifest while the later does not:
+  assertCanRecreate unicode.bundle
+}
+
+test_recreate_with_verticaltab() {
+  # check if a tar with \v in filenames can be recreated from old deltas:
+  # no delta for jessie (p-t 1.33, tar_1.27.1) or stretch (p-t 1.38, tar 1.29)
+  # as neither can create a delta for that file.
+  assertCanRecreate verticaltab.bundle
+}
+
+test_recreate_with_doublebackslash() {
+  # check if a file with double backslashes in filenames can be recreated.
+  # (in this test there is no a b f r t v or n after the double backslash
+  #  as no old version could handle those).
+  assertCanRecreate doublebackslash.bundle
+}
+
+. shunit2
diff --git a/test/test_roundtrip.sh b/test/test_roundtrip.sh
index ab6c240..b026f53 100644
--- a/test/test_roundtrip.sh
+++ b/test/test_roundtrip.sh
@@ -59,4 +59,30 @@ test_escaping() {
   assertWorksWithTarball $SAMPLES/tarballs/systemd_239.orig.tar.gz
 }
 
+test_roundtrip_simpleescapes() {
+  assertWorksWithTarball $SAMPLES/tarballs/simpleescapes.tar
+}
+
+test_roundtrip_newlines() {
+  assertWorksWithTarball $SAMPLES/tarballs/newlines.tar
+}
+
+test_roundtrip_unicode() {
+  assertWorksWithTarball $SAMPLES/tarballs/unicode.tar
+}
+
+test_roundtrip_verticaltab() {
+  assertWorksWithTarball $SAMPLES/tarballs/verticaltab.tar
+}
+
+test_roundtrip_doublebackslash() {
+  assertWorksWithTarball $SAMPLES/tarballs/doublebackslash.tar
+}
+
+test_roundtrip_complexbackslash() {
+  # a filename with backslash followed by a b.
+  # Older versions unescaped the \b in \\b:
+  assertWorksWithTarball $SAMPLES/tarballs/actualbackslash.tar
+}
+
 . shunit2
-- 
2.20.1

>From e6f008f0d5cfe43314a9fe2a2a2dcf9fe442631f Mon Sep 17 00:00:00 2001
From: "Bernhard R. Link" <brl...@debian.org>
Date: Sun, 31 Mar 2019 01:32:59 +0100
Subject: [PATCH 5/6] add compatibility for files with 1.46

version 1.46 changed the format of the manifest file to contain
unescaped filenames (with the incomplete unquote implementation it had).

To still be able to checkout tarballs from delta files created with
1.46, add another variant to try that assumes the filenames in the
manifest file are already unquoted with that old implementation, so
that the tarball is created with the same wrong filenames included
so that the binary delta can be applied.
---
 pristine-tar | 40 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 37 insertions(+), 3 deletions(-)

diff --git a/pristine-tar b/pristine-tar
index 1c6e02e..13b5d1f 100755
--- a/pristine-tar
+++ b/pristine-tar
@@ -359,6 +359,21 @@ Options:
 ";
 }
 
+sub old_unquote_filename {
+  my $filename = shift;
+
+  $filename =~ s/\\a/\a/g;
+  $filename =~ s/\\b/\b/g;
+  $filename =~ s/\\f/\f/g;
+  $filename =~ s/\\n/\n/g;
+  $filename =~ s/\\r/\r/g;
+  $filename =~ s/\\t/\t/g;
+  $filename =~ s/\\v/\x11/g; # sic!
+  $filename =~ s/\\\\/\\/g;
+
+  return $filename;
+}
+
 sub unquote_filename {
   my $filename = shift;
 
@@ -400,11 +415,22 @@ sub recreatetarball {
   while (<IN>) {
     chomp;
     push @manifest, $_;
-    print OUT unquote_filename($_) . pack("C", 0);
+    if (defined $options{v1_46_compat}) {
+      # 1.46 wrote a manifest with some escapes removed:
+      print OUT $_ . pack("C", 0);
+    } else {
+      print OUT unquote_filename($_) . pack("C", 0);
+    }
   }
   close IN;
   close OUT;
 
+  my $unquote_filename = \&unquote_filename;
+  if (defined $options{v1_46_compat}) {
+    # but for processing, they are unquoted a second time:
+    $unquote_filename = \&old_unquote_filename;
+  }
+
   # The manifest and source should have the same filenames,
   # but the manifest probably has all the files under a common
   # subdirectory. Check if it does.
@@ -444,7 +470,7 @@ sub recreatetarball {
   # in the tarball, since it can easily vary.
   my $full_sweep = 0;
   foreach my $file (@manifest) {
-    my $unquoted_file = unquote_filename($file);
+    my $unquoted_file = $unquote_filename->($file);
 
     if (-l "$tempdir/workdir/$unquoted_file") {
       # Can't set timestamp of a symlink, so
@@ -478,7 +504,7 @@ sub recreatetarball {
   # Set file times only after modifying of the directory content is
   # done.
   foreach my $file (@manifest) {
-    my $unquoted_file = unquote_filename($file);
+    my $unquoted_file = $unquote_filename->($file);
     if (-e "$tempdir/workdir/$unquoted_file") {
       utime(0, 0, "$tempdir/workdir/$unquoted_file") || die "utime: $file: $!";
     }
@@ -612,6 +638,14 @@ sub gentar {
     );
   };
   push @try, \&recreatetarball_longlink_100;
+  push @try, sub {
+    recreatetarball(
+      $delta->{manifest}, getcwd,
+      clobber_source => 0,
+      v1_46_compat => 1,
+      %opts
+    );
+  };
   push @try, sub {
     recreatetarball(
       $delta->{manifest}, getcwd,
-- 
2.20.1

>From 2898c28199170f47ae2ddc74e52dfbf78a0bf174 Mon Sep 17 00:00:00 2001
From: "Bernhard R. Link" <brl...@debian.org>
Date: Fri, 29 Mar 2019 23:03:01 +0100
Subject: [PATCH 6/6] release nmu

---
 debian/changelog | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index acac066..5abfe10 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+pristine-tar (1.46+nmu1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * no longer write unescaped filenames into the manifest
+    (reverthing the previous fix of #902115)
+  * create a unescaped and NUL-terminated copy of the manifest file
+    to be given to tar using --null (Closes: #902115, #901952)
+
+ -- Bernhard R. Link <brl...@debian.org>  Sun, 31 Mar 2019 03:05:14 +0200
+
 pristine-tar (1.46) unstable; urgency=medium
 
   * refresh packaging (debhelper 12, std-ver 4.3.0)
-- 
2.20.1

Reply via email to