code-google-com / google-diff-match-patch

Automatically exported from code.google.com/p/google-diff-match-patch
Apache License 2.0
0 stars 0 forks source link

Invalid patch created #18

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
* What steps will reproduce the problem?

I have attached a demonstration of the issue. This creates a patch between
two strings. It then tries to apply the patch to the first string to get
the second string.

* What is the expected output? What do you see instead?

When applying the patch, an IllegalArgumentException is thrown. The patch
created has the following invalid header on the second chunk:

@@ --2,32 +9,36 @@

* What version of the product are you using? On what operating system?

Latest version (20090202) on OS/X, Java 6 - but also occurs on Linux.

* Please provide any additional information below.

None.

Original issue reported on code.google.com by vexed.de...@googlemail.com on 24 Mar 2009 at 6:58

Attachments:

GoogleCodeExporter commented 9 years ago
Confirmed.  The issue is the double-negative on this header:
@@ --2,32 +9,36 @@
patch_fromText is absolutely correct to throw an IllegalArgumentException when 
presented with that malformed patch.

Will investigate and push a new version within a few hours.  Thank you!

Original comment by neil.fra...@gmail.com on 24 Mar 2009 at 7:59

GoogleCodeExporter commented 9 years ago
It looks like a simple indexing failure when moving from one patch to the next. 

Affects all versions of this library.  But I want to run some exhaustive tests 
to 
make sure.  If you are in a hurry, just make the following one line patch into 
patch_make(text1, diffs).  Otherwise I'll post an update with a bunch more unit 
tests 
once I'm completely satisfied that this isn't a case of whack-a-mole.  There 
already 
is one unit test for this, but I can see now it's incorrect.

          if (!patch.diffs.isEmpty()) {
            patch_addContext(patch, prepatch_text);
            patches.add(patch);
            patch = new Patch();
            prepatch_text = postpatch_text;
            // Fixes issue #18:
            char_count1 = char_count2;
          }

Original comment by neil.fra...@gmail.com on 25 Mar 2009 at 1:08

GoogleCodeExporter commented 9 years ago
Thanks for the update Neil - appreciate the quick response.

Original comment by vexed.de...@googlemail.com on 25 Mar 2009 at 10:46

GoogleCodeExporter commented 9 years ago
Yes, that one line change is a complete fix.  I've pushed out a new version on 
SVN 
and as a source archive which corrects all four language versions.  A new unit 
test 
has been added and an existing test has been corrected.

Thank you for the great bug report.

Original comment by neil.fra...@gmail.com on 25 Mar 2009 at 6:02