This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-shade-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new 0945bcb [MSHADE-417] Fix null bytes appended to small files (#160)
0945bcb is described below
commit 0945bcbcefd1144029f86da51a09bd8a805bd158
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Oct 20 22:36:17 2022 +0200
[MSHADE-417] Fix null bytes appended to small files (#160)
* Fix MSHADE-417
* don't unread when nothing was read
* Add a unit test
Co-authored-by: NichtStudioCode
<[email protected]>
---
.../apache/maven/plugins/shade/DefaultShader.java | 7 ++--
.../maven/plugins/shade/DefaultShaderTest.java | 39 ++++++++++++++++++++++
2 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
b/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
index defa123..c646cc7 100644
--- a/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
+++ b/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
@@ -181,8 +181,11 @@ public class DefaultShader
public boolean hasZipHeader() throws IOException
{
final byte[] header = new byte[HEADER_LEN];
- super.read( header, 0, HEADER_LEN );
- super.unread( header );
+ int len = super.read( header, 0, HEADER_LEN );
+ if ( len != -1 )
+ {
+ super.unread( header, 0, len );
+ }
return Arrays.equals( header, ZIP_HEADER );
}
}
diff --git
a/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
b/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
index b6a8728..14786ec 100644
--- a/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
+++ b/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
@@ -477,6 +477,45 @@ public class DefaultShaderTest
temporaryFolder.delete();
}
+ @Test
+ public void testShaderWithSmallEntries() throws Exception
+ {
+ TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ final String innerJarFileName = "inner.jar";
+ int len;
+
+ temporaryFolder.create();
+ File innerJar = temporaryFolder.newFile( innerJarFileName );
+ try ( JarOutputStream jos = new JarOutputStream( new FileOutputStream(
innerJar ) ) )
+ {
+ jos.putNextEntry( new JarEntry( "foo.txt" ) );
+ byte[] bytes = "c1".getBytes(StandardCharsets.UTF_8);
+ len = bytes.length;
+ jos.write( bytes );
+ jos.closeEntry();
+ }
+
+ ShadeRequest shadeRequest = new ShadeRequest();
+ shadeRequest.setJars( new LinkedHashSet<>( Collections.singleton(
innerJar ) ) );
+ shadeRequest.setFilters( new ArrayList<Filter>() );
+ shadeRequest.setRelocators( new ArrayList<Relocator>() );
+ shadeRequest.setResourceTransformers( new
ArrayList<ResourceTransformer>() );
+ File shadedFile = temporaryFolder.newFile( "shaded.jar" );
+ shadeRequest.setUberJar( shadedFile );
+
+ DefaultShader shader = newShader();
+ shader.shade( shadeRequest );
+
+ JarFile shadedJarFile = new JarFile( shadedFile );
+ JarEntry entry = shadedJarFile.getJarEntry( "foo.txt" );
+
+ //After shading, entry compression method should not be changed.
+ Assert.assertEquals( entry.getSize(), len );
+
+ temporaryFolder.delete();
+ }
+
private void writeEntryWithoutCompression( String entryName, byte[]
entryBytes, JarOutputStream jos ) throws IOException
{
final JarEntry entry = new JarEntry( entryName );