You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2020/01/27 22:54:15 UTC

svn commit: r1873232 - in /poi/trunk/src: java/org/apache/poi/poifs/filesystem/FileMagic.java testcases/org/apache/poi/poifs/filesystem/TestFileMagic.java

Author: centic
Date: Mon Jan 27 22:54:15 2020
New Revision: 1873232

URL: http://svn.apache.org/viewvc?rev=1873232&view=rev
Log:
Handle empty files correctly when looking for FileMagic to avoid NegativeArraySizeException

Modified:
    poi/trunk/src/java/org/apache/poi/poifs/filesystem/FileMagic.java
    poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestFileMagic.java

Modified: poi/trunk/src/java/org/apache/poi/poifs/filesystem/FileMagic.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/filesystem/FileMagic.java?rev=1873232&r1=1873231&r2=1873232&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/filesystem/FileMagic.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/filesystem/FileMagic.java Mon Jan 27 22:54:15 2020
@@ -113,7 +113,7 @@ public enum FileMagic {
     final static int MAX_PATTERN_LENGTH = 44;
 
     final byte[][] magic;
-    
+
     FileMagic(long magic) {
         this.magic = new byte[1][8];
         LittleEndian.putLong(this.magic[0], 0, magic);
@@ -122,7 +122,7 @@ public enum FileMagic {
     FileMagic(byte[]... magic) {
         this.magic = magic;
     }
-    
+
     FileMagic(String... magic) {
         this.magic = new byte[magic.length][];
         int i=0;
@@ -172,6 +172,9 @@ public enum FileMagic {
             // read as many bytes as possible, up to the required number of bytes
             byte[] data = new byte[MAX_PATTERN_LENGTH];
             int read = IOUtils.readFully(fis, data, 0, MAX_PATTERN_LENGTH);
+            if(read == -1) {
+                return FileMagic.UNKNOWN;
+            }
 
             // only use the bytes that could be read
             data = Arrays.copyOf(data, read);

Modified: poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestFileMagic.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestFileMagic.java?rev=1873232&r1=1873231&r2=1873232&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestFileMagic.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestFileMagic.java Mon Jan 27 22:54:15 2020
@@ -107,8 +107,15 @@ public class TestFileMagic {
     @Test
     public void testShortFile() throws IOException {
         // having a file shorter than 8 bytes previously caused an exception
-        byte[] data = new byte[] { -1, -40, -1, -32, 0 };
+        fetchMagicFromData(new byte[] { -1, -40, -1, -32, 0 });
+        fetchMagicFromData(new byte[] { -1, -40, -1, -32 });
+        fetchMagicFromData(new byte[] { -1, -40, -1 });
+        fetchMagicFromData(new byte[] { -1, -40 });
+        fetchMagicFromData(new byte[] { -1 });
+        fetchMagicFromData(new byte[0]);
+    }
 
+    private void fetchMagicFromData(byte[] data) throws IOException {
         File file = TempFile.createTempFile("TestFileMagic", ".bin");
         try {
             try (FileOutputStream fos = new FileOutputStream(file)) {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org