]> source.dussan.org Git - poi.git/commitdiff
BUG 59858 -- avoid npe when there's a collision of record names
authorTim Allison <tallison@apache.org>
Tue, 18 Oct 2016 16:43:20 +0000 (16:43 +0000)
committerTim Allison <tallison@apache.org>
Tue, 18 Oct 2016 16:43:20 +0000 (16:43 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1765479 13f79535-47bb-0310-9956-ffa450edef68

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

index d0aa4660c2393b2bdf6323ea8467c6c8a74f958d..21b535b104ba681783315397ef1214736899e247 100644 (file)
@@ -218,7 +218,7 @@ public class VBAMacroReader implements Closeable {
             module = new Module();
             modules.put(name, module);
             module.read(dis);
-        } else {
+        } else if (module.buf == null) { //if we haven't already read the bytes for the module keyed off this name...
             if (module.offset == null) {
                 //This should not happen. bug 59858
                 throw new IOException("Module offset for '" + name + "' was never read.");
index f622c548676103ce1537f896176c874fe9db950c..3a4c47361ddc36f581c010e47dad139e58957032 100644 (file)
@@ -254,24 +254,14 @@ public class TestVBAMacroReader {
         assertNotNull(macros.get("Module20"));
         assertContains(macros.get("Module20"), "here start of superscripting");
     }
-    
-    // This test is written as expected-to-fail and should be rewritten
-    // as expected-to-pass when the bug is fixed.
+
     @Test
     public void bug59858() throws IOException {
-        try {
-            fromFile(POIDataSamples.getSpreadSheetInstance(), "59858.xls");
-            testPassesNow(59858);
-        } catch (IOException e) {
-            if (e.getMessage().matches("Module offset for '.+' was never read.")) {
-                //e.printStackTrace();
-                // NPE when reading module.offset in VBAMacroReader.readMacros (approx line 258)
-                skipTest(e);
-            } else {
-                // something unexpected failed
-                throw e;
-            }
-        }
+        File f = POIDataSamples.getSpreadSheetInstance().getFile("59830.xls");
+        VBAMacroReader r = new VBAMacroReader(f);
+        Map<String, String> macros = r.readMacros();
+        assertNotNull(macros.get("Module20"));
+        assertContains(macros.get("Module20"), "start of superscripting");
     }
 
     @Test