diff --git a/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java b/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java index aa12a5e7..a96da554 100644 --- a/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java +++ b/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java @@ -24,6 +24,7 @@ import java.io.Reader; import java.io.Writer; import java.nio.charset.Charset; +import java.nio.charset.MalformedInputException; import java.nio.file.FileSystemException; import java.nio.file.Files; import java.nio.file.NoSuchFileException; @@ -317,6 +318,9 @@ public static void copyFile(Path from, Path to, String encoding, FilterWrapper[] writer.write(buffer, 0, nRead); } } + } catch (MalformedInputException e) { + // Most likely a binary; just copy it then + copyFile(from, to, encoding, null, overwrite); } } diff --git a/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java b/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java index 42495266..f1c83c0d 100644 --- a/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java +++ b/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java @@ -29,6 +29,8 @@ import org.junit.jupiter.api.Test; import static org.apache.maven.api.di.testing.MavenDIExtension.getBasedir; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -147,4 +149,24 @@ public void testEscapeWindowsPathNotAtBeginning() { "jdbc:derby:C:\\\\Users\\\\Administrator/test;create=true", FilteringUtils.escapeWindowsPath("jdbc:derby:C:\\Users\\Administrator/test;create=true")); } + + @Test + public void testBinaryFileWithFiltering() throws IOException { + Path fromFile = Paths.get(getBasedir() + "/src/test/units-files/binary-file/binary-file"); + Path toFile = TEST_DIRECTORY.resolve("binary-file-copied"); + assertDoesNotThrow(() -> FilteringUtils.copyFile( + fromFile, + toFile, + "UTF-8", + new FilterWrapper[] { + new FilterWrapper() { + @Override + public Reader getReader(Reader fileReader) { + return fileReader; + } + } + }, + false)); + assertArrayEquals(Files.readAllBytes(toFile), Files.readAllBytes(fromFile), "Binary files differ"); + } } diff --git a/src/test/units-files/binary-file/binary-file b/src/test/units-files/binary-file/binary-file new file mode 100644 index 00000000..3a87b0a6 Binary files /dev/null and b/src/test/units-files/binary-file/binary-file differ