diff --git a/java-diff-utils/src/main/java/com/github/difflib/patch/Chunk.java b/java-diff-utils/src/main/java/com/github/difflib/patch/Chunk.java index b5b2f31..760f569 100644 --- a/java-diff-utils/src/main/java/com/github/difflib/patch/Chunk.java +++ b/java-diff-utils/src/main/java/com/github/difflib/patch/Chunk.java @@ -113,7 +113,7 @@ public VerifyChunk verifyChunk(List target, int fuzz, int position) throws Pa int lastIndex = size() - fuzz; int last = position + size() - 1; - if (position + fuzz > target.size() || last - fuzz > target.size()) { + if (position + fuzz > target.size() || last - fuzz >= target.size()) { return VerifyChunk.POSITION_OUT_OF_TARGET; } for (int i = startIndex; i < lastIndex; i++) { diff --git a/java-diff-utils/src/test/java/com/github/difflib/patch/ChunkTest.java b/java-diff-utils/src/test/java/com/github/difflib/patch/ChunkTest.java index 46eb727..0dae455 100644 --- a/java-diff-utils/src/test/java/com/github/difflib/patch/ChunkTest.java +++ b/java-diff-utils/src/test/java/com/github/difflib/patch/ChunkTest.java @@ -31,6 +31,16 @@ void verifyChunk() throws PatchFailedException { VerifyChunk.CONTENT_DOES_NOT_MATCH_TARGET, chunk.verifyChunk(toCharList("prefix suffix"), 1, 7)); } + @Test + void verifyChunkAtTheEndOfTheTarget() throws PatchFailedException { + // chunk covers target indices 7..10, so it needs a target of at least 11 + Chunk chunk = new Chunk<>(7, toCharList("test")); + + assertEquals(VerifyChunk.OK, chunk.verifyChunk(toCharList("prefix test"), 0, 7)); + assertEquals(VerifyChunk.POSITION_OUT_OF_TARGET, chunk.verifyChunk(toCharList("prefix tes"), 0, 7)); + assertEquals(VerifyChunk.POSITION_OUT_OF_TARGET, chunk.verifyChunk(toCharList("prefix te"), 0, 7)); + } + private List toCharList(String str) { return str.chars().mapToObj(x -> (char) x).collect(Collectors.toList()); }