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 <gno...@gmail.com>
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 
<51272202+nichtstudioc...@users.noreply.github.com>
---
 .../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 );

Reply via email to