]> source.dussan.org Git - poi.git/commitdiff
BUG 60158 -- AIOOBE in VBAMacroReader
authorTim Allison <tallison@apache.org>
Tue, 18 Oct 2016 12:55:34 +0000 (12:55 +0000)
committerTim Allison <tallison@apache.org>
Tue, 18 Oct 2016 12:55:34 +0000 (12:55 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1765433 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/poifs/macros/VBAMacroReader.java
src/java/org/apache/poi/util/RLEDecompressingInputStream.java
src/testcases/org/apache/poi/poifs/macros/TestVBAMacroReader.java

index 66ebab97dce4d1212a880ca7e065aa7eae4e500b..90727c24a81f45964d2f655ac671c51a4d7268cc 100644 (file)
@@ -265,6 +265,9 @@ public class VBAMacroReader implements Closeable {
     private static final int MODULETYPE_PROCEDURAL = 0x0021;
     private static final int MODULETYPE_DOCUMENT_CLASS_OR_DESIGNER = 0x0022;
     private static final int PROJECTLCID = 0x0002;
+    private static final int MODULE_NAME = 0x0019;
+    private static final int MODULE_NAME_UNICODE = 0x0047;
+    private static final int MODULE_DOC_STRING = 0x001c;
 
     /**
      * Reads VBA Project modules from a VBA Project directory located at
index f31996545441bf2b0efe5e1850b235bc546582fb..471fdab2cd6dcd49e6efcc7502dc32fbcbc4380c 100644 (file)
@@ -91,7 +91,7 @@ public class RLEDecompressingInputStream extends InputStream {
                 return -1;
             }
         }
-        return buf[pos++];
+        return buf[pos++]& 0xFF;
     }
 
     @Override
index 614b4effafcbd37fa1cb70463dcb4ba99b7af8c9..0e634b5c581a701085ef23ed1dd7f388eb6d1ff7 100644 (file)
@@ -280,16 +280,13 @@ public class TestVBAMacroReader {
             }
         }
     }
-    
-    // This test is written as expected-to-fail and should be rewritten
-    // as expected-to-pass when the bug is fixed.
+
     @Test
     public void bug60158() throws IOException {
-        try {
-            fromFile(POIDataSamples.getDocumentInstance(), "60158.docm");
-            testPassesNow(60158);
-        } catch (ArrayIndexOutOfBoundsException e) {
-            skipTest(e);
-        }
+        File f = POIDataSamples.getDocumentInstance().getFile("60158.docm");
+        VBAMacroReader r = new VBAMacroReader(f);
+        Map<String, String> macros = r.readMacros();
+        assertNotNull(macros.get("NewMacros"));
+        assertContains(macros.get("NewMacros"), "' dirty");
     }
 }