Title: [191367] trunk/Tools
Revision
191367
Author
[email protected]
Date
2015-10-20 18:41:52 -0700 (Tue, 20 Oct 2015)

Log Message

svn-apply fails to apply binary diffs in some cases
https://bugs.webkit.org/show_bug.cgi?id=64647

Reviewed by Daniel Bates.

* Scripts/VCSUtils.pm:
(decodeGitBinaryPatchDeltaSize): Modified.
We need to handle the case where the binary diff is the last in the patch; so we match on "-- \n" or "\Z".
* Tools/Scripts/webkitperl/VCSUtils_unittest/decodeGitBinaryPatch.pl: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/Tools/ChangeLog (191366 => 191367)


--- trunk/Tools/ChangeLog	2015-10-21 01:10:32 UTC (rev 191366)
+++ trunk/Tools/ChangeLog	2015-10-21 01:41:52 UTC (rev 191367)
@@ -1,3 +1,15 @@
+2015-10-20  Dana Burkart  <[email protected]>
+
+        svn-apply fails to apply binary diffs in some cases
+        https://bugs.webkit.org/show_bug.cgi?id=64647
+
+        Reviewed by Daniel Bates.
+
+        * Scripts/VCSUtils.pm:
+        (decodeGitBinaryPatchDeltaSize): Modified.
+        We need to handle the case where the binary diff is the last in the patch; so we match on "-- \n" or "\Z".
+        * Tools/Scripts/webkitperl/VCSUtils_unittest/decodeGitBinaryPatch.pl: Added.
+
 2015-10-20  Alexey Proskuryakov  <[email protected]>
 
         Mac Debug EWS never finishes when there are failures

Modified: trunk/Tools/Scripts/VCSUtils.pm (191366 => 191367)


--- trunk/Tools/Scripts/VCSUtils.pm	2015-10-21 01:10:32 UTC (rev 191366)
+++ trunk/Tools/Scripts/VCSUtils.pm	2015-10-21 01:41:52 UTC (rev 191367)
@@ -2039,8 +2039,8 @@
     # Then, content of the chunk comes. To decode the content, we
     # need decode it with base85 first, and then zlib.
     my $gitPatchRegExp = '(literal|delta) ([0-9]+)\n([A-Za-z0-9!#$%&()*+-;<=>?@^_`{|}~\\n]*?)\n\n';
-    if ($contents !~ m"\nGIT binary patch\n$gitPatchRegExp$gitPatchRegExp\Z") {
-        die "$fullPath: unknown git binary patch format"
+    if ($contents !~ m"\nGIT binary patch\n$gitPatchRegExp$gitPatchRegExp(\Z|-- \n)") {
+        return ();
     }
 
     my $binaryChunkType = $1;

Modified: trunk/Tools/Scripts/svn-apply (191366 => 191367)


--- trunk/Tools/Scripts/svn-apply	2015-10-21 01:10:32 UTC (rev 191366)
+++ trunk/Tools/Scripts/svn-apply	2015-10-21 01:41:52 UTC (rev 191367)
@@ -250,6 +250,9 @@
     my $contents = $diffHashRef->{svnConvertedText};
 
     my ($binaryChunkType, $binaryChunk, $reverseBinaryChunkType, $reverseBinaryChunk) = decodeGitBinaryPatch($contents, $fullPath);
+    if (!$binaryChunkType) {
+        die "$fullPath: unknown git binary patch format";
+    }
 
     my $isFileAddition = $diffHashRef->{isNew};
     my $isFileDeletion = $diffHashRef->{isDeletion};

Added: trunk/Tools/Scripts/webkitperl/VCSUtils_unittest/decodeGitBinaryPatch.pl (0 => 191367)


--- trunk/Tools/Scripts/webkitperl/VCSUtils_unittest/decodeGitBinaryPatch.pl	                        (rev 0)
+++ trunk/Tools/Scripts/webkitperl/VCSUtils_unittest/decodeGitBinaryPatch.pl	2015-10-21 01:41:52 UTC (rev 191367)
@@ -0,0 +1,126 @@
+#!/usr/bin/perl -w
+#
+# Copyright (C) 2015 Apple Inc.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Unit tests for decodeGitBinaryPatch()
+
+use strict;
+use warnings;
+
+use Test::More;
+use VCSUtils;
+
+my @testCaseHashRefs = (
+{
+    diffName => "Single line chunks",
+    inputText => <<'END',
+index 490e319f550754ff97dbc4d5a69ad7dbc69c85da..7764e296b482c0ff2c9e4f04114cee9fa1f7544f 100644
+GIT binary patch
+delta 12
+Tcmdnzb;WhVcGk^`9I~<iCFlgC
+
+delta 12
+Tcmdnzb;WhVcGk^`9I~<iCFlgC
+
+END
+    fullPath => "foo/bar",
+    expectedReturn => [
+        'delta',
+        VCSUtils::decodeGitBinaryChunk('Tcmdnzb;WhVcGk^`9I~<iCFlgC', "foo/bar"),
+        'delta',
+        VCSUtils::decodeGitBinaryChunk('Tcmdnzb;WhVcGk^`9I~<iCFlgC', "foo/bar"),
+    ],
+},
+{
+    diffName => "Multiline line chunks",
+    inputText => <<'END',
+index 490e319f550754ff97dbc4d5a69ad7dbc69c85da..7764e296b482c0ff2c9e4f04114cee9fa1f7544f 100644
+GIT binary patch
+delta 12
+Tcmdnzb;WhVcGk^`9I~<iCFlgC
+
+delta 12
+zuDr5uCY6G+qE&tSt8Hf1`e-KmRHU1=EbP;&Vn8(El#%J`5jjQa<69Qy^WA8twJa=e
+zKA=23zh&X#=9RtE2ev9KEAFrPu53C~W&er+>0h@h?9_e$t9tRYnNwz6%qmv)>r07~
+z(npNQ>6pss-hG-BQ`xUKqyDnCRhen7(g;<(n-~KU(~z0dtcE;ZqD|&MTInj%e{n1M
+z%E0#7lQ5vNzoxn>y*jsW?-djFDBQQ*K3#hs+NZMgm!)^#@~ZxQ`d0Mso6dZV^n)D=
+zZz*ZUS2-6H?wvlpqOj}k?}x6)d~fuM+baq`D*FGwuWD4AqtpM|m2=PUW{)i7Uwi%)
+
+END
+    fullPath => "foo/bar",
+    expectedReturn => [
+        'delta',
+        VCSUtils::decodeGitBinaryChunk('Tcmdnzb;WhVcGk^`9I~<iCFlgC', "foo/bar"),
+        'delta',
+        VCSUtils::decodeGitBinaryChunk('zuDr5uCY6G+qE&tSt8Hf1`e-KmRHU1=EbP;&Vn8(El#%J`5jjQa<69Qy^WA8twJa=e
+        zKA=23zh&X#=9RtE2ev9KEAFrPu53C~W&er+>0h@h?9_e$t9tRYnNwz6%qmv)>r07~
+        z(npNQ>6pss-hG-BQ`xUKqyDnCRhen7(g;<(n-~KU(~z0dtcE;ZqD|&MTInj%e{n1M
+        z%E0#7lQ5vNzoxn>y*jsW?-djFDBQQ*K3#hs+NZMgm!)^#@~ZxQ`d0Mso6dZV^n)D=
+        zZz*ZUS2-6H?wvlpqOj}k?}x6)d~fuM+baq`D*FGwuWD4AqtpM|m2=PUW{)i7Uwi%)', "foo/bar"),
+    ],
+},
+{
+    diffName => "Multiline line chunks and as last patch",
+    inputText => <<'END',
+index 490e319f550754ff97dbc4d5a69ad7dbc69c85da..7764e296b482c0ff2c9e4f04114cee9fa1f7544f 100644
+GIT binary patch
+delta 12
+Tcmdnzb;WhVcGk^`9I~<iCFlgC
+
+delta 12
+zuDr5uCY6G+qE&tSt8Hf1`e-KmRHU1=EbP;&Vn8(El#%J`5jjQa<69Qy^WA8twJa=e
+zKA=23zh&X#=9RtE2ev9KEAFrPu53C~W&er+>0h@h?9_e$t9tRYnNwz6%qmv)>r07~
+z(npNQ>6pss-hG-BQ`xUKqyDnCRhen7(g;<(n-~KU(~z0dtcE;ZqD|&MTInj%e{n1M
+z%E0#7lQ5vNzoxn>y*jsW?-djFDBQQ*K3#hs+NZMgm!)^#@~ZxQ`d0Mso6dZV^n)D=
+zZz*ZUS2-6H?wvlpqOj}k?}x6)d~fuM+baq`D*FGwuWD4AqtpM|m2=PUW{)i7Uwi%)
+
+--
+1.7.4.4
+END
+    fullPath => "foo/bar",
+    expectedReturn => [
+        'delta',
+        VCSUtils::decodeGitBinaryChunk('Tcmdnzb;WhVcGk^`9I~<iCFlgC', "foo/bar"),
+        'delta',
+        VCSUtils::decodeGitBinaryChunk('zuDr5uCY6G+qE&tSt8Hf1`e-KmRHU1=EbP;&Vn8(El#%J`5jjQa<69Qy^WA8twJa=e
+        zKA=23zh&X#=9RtE2ev9KEAFrPu53C~W&er+>0h@h?9_e$t9tRYnNwz6%qmv)>r07~
+        z(npNQ>6pss-hG-BQ`xUKqyDnCRhen7(g;<(n-~KU(~z0dtcE;ZqD|&MTInj%e{n1M
+        z%E0#7lQ5vNzoxn>y*jsW?-djFDBQQ*K3#hs+NZMgm!)^#@~ZxQ`d0Mso6dZV^n)D=
+        zZz*ZUS2-6H?wvlpqOj}k?}x6)d~fuM+baq`D*FGwuWD4AqtpM|m2=PUW{)i7Uwi%)', "foo/bar"),
+    ],
+}
+);
+
+my $testCasesCount = @testCaseHashRefs;
+plan(tests => $testCasesCount); # Total number of assertions.
+
+foreach my $testCase (@testCaseHashRefs) {
+    my $testNameStart = "decodeGitBinaryPatch(): $testCase->{diffName}: Comparing";
+
+
+    my @got = VCSUtils::decodeGitBinaryPatch($testCase->{inputText}, $testCase->{fullPath});
+    my $expectedReturn = $testCase->{expectedReturn};
+
+    is_deeply(\@got, $expectedReturn, "$testNameStart return value.");
+
+}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to