From 00d7f8b520d134dcc7158601db6717258aa7ed67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Sat, 8 Nov 2025 15:33:35 +0100 Subject: [PATCH 1/3] Be gracious with binary files among the resources to filter --- .../org/apache/maven/shared/filtering/FilteringUtils.java | 4 ++++ 1 file changed, 4 insertions(+) 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); } } From 8db6a0d6ba15868043b55c714815b62d3776eb1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Sat, 8 Nov 2025 16:09:34 +0100 Subject: [PATCH 2/3] Add test for filtering of binary files --- .../shared/filtering/FilteringUtilsTest.java | 20 ++++++++++++++++++ src/test/units-files/binary-file/binary-file | Bin 0 -> 2492 bytes 2 files changed, 20 insertions(+) create mode 100644 src/test/units-files/binary-file/binary-file 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..0e9072e7 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,7 @@ import org.junit.jupiter.api.Test; import static org.apache.maven.api.di.testing.MavenDIExtension.getBasedir; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -147,4 +148,23 @@ public void testEscapeWindowsPathNotAtBeginning() { "jdbc:derby:C:\\\\Users\\\\Administrator/test;create=true", FilteringUtils.escapeWindowsPath("jdbc:derby:C:\\Users\\Administrator/test;create=true")); } + + @Test + public void testDoNotThrowOnBinaryFile() { + 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)); + } } 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 0000000000000000000000000000000000000000..3a87b0a6f5cd92825b4adcbbb5647716bc9fcb89 GIT binary patch literal 2492 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 Date: Sat, 8 Nov 2025 16:44:59 +0100 Subject: [PATCH 3/3] Make the test also compare the two files --- .../org/apache/maven/shared/filtering/FilteringUtilsTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 0e9072e7..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,7 @@ 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; @@ -150,7 +151,7 @@ public void testEscapeWindowsPathNotAtBeginning() { } @Test - public void testDoNotThrowOnBinaryFile() { + 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( @@ -166,5 +167,6 @@ public Reader getReader(Reader fileReader) { } }, false)); + assertArrayEquals(Files.readAllBytes(toFile), Files.readAllBytes(fromFile), "Binary files differ"); } }