You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by on...@apache.org on 2016/07/09 08:18:29 UTC

svn commit: r1751987 - /poi/trunk/src/java/org/apache/poi/poifs/macros/VBAMacroReader.java

Author: onealj
Date: Sat Jul  9 08:18:29 2016
New Revision: 1751987

URL: http://svn.apache.org/viewvc?rev=1751987&view=rev
Log:
bug 52949,59830: move module storage and decompressing into a standalone function

Modified:
    poi/trunk/src/java/org/apache/poi/poifs/macros/VBAMacroReader.java

Modified: poi/trunk/src/java/org/apache/poi/poifs/macros/VBAMacroReader.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/macros/VBAMacroReader.java?rev=1751987&r1=1751986&r2=1751987&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/macros/VBAMacroReader.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/macros/VBAMacroReader.java Sat Jul  9 08:18:29 2016
@@ -171,6 +171,39 @@ public class VBAMacroReader implements C
         int count = stream.read(buffer);
         return new String(buffer, 0, count, charset);
     }
+    
+    /**
+     * reads module from input stream and adds it to the modules map for decompression later
+     * on the second pass through this function, the module will be decompressed
+     * 
+     * Side-effects: adds a new module to the module map or sets the buf field on the module
+     * to the decompressed stream contents (the VBA code for one module)
+     *
+     * @param in the run-length encoded input stream to read from
+     * @param streamName the stream name of the module
+     * @param modules a map to store the modules
+     * @throws IOException
+     */
+    private static void readModule(RLEDecompressingInputStream in, String streamName, ModuleMap modules) throws IOException {
+        int moduleOffset = in.readInt();
+        Module module = modules.get(streamName);
+        // First time we've seen the module. Add it to the ModuleMap and decompress it later 
+        if (module == null) {
+            module = new Module();
+            module.offset = moduleOffset;
+            modules.put(streamName, module);
+        }
+        // Decompress a previously found module and store the decompressed result into module.buf
+        else {
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            RLEDecompressingInputStream stream = new RLEDecompressingInputStream(new ByteArrayInputStream(
+                    module.buf, moduleOffset, module.buf.length - moduleOffset));
+            IOUtils.copy(stream, out);
+            stream.close();
+            out.close();
+            module.buf = out.toByteArray();
+        }
+    }
 
     /**
       * Skips <tt>n</tt> bytes in an input stream, throwing IOException if the
@@ -243,21 +276,7 @@ public class VBAMacroReader implements C
                                 streamName = readString(in, recordLength, modules.charset);
                                 break;
                             case MODULEOFFSET:
-                                int moduleOffset = in.readInt();
-                                Module module = modules.get(streamName);
-                                if (module != null) {
-                                    ByteArrayOutputStream out = new ByteArrayOutputStream();
-                                    RLEDecompressingInputStream stream = new RLEDecompressingInputStream(new ByteArrayInputStream(
-                                            module.buf, moduleOffset, module.buf.length - moduleOffset));
-                                    IOUtils.copy(stream, out);
-                                    stream.close();
-                                    out.close();
-                                    module.buf = out.toByteArray();
-                                } else {
-                                    module = new Module();
-                                    module.offset = moduleOffset;
-                                    modules.put(streamName, module);
-                                }
+                                readModule(in, streamName, modules);
                                 break;
                             default:
                                 trySkip(in, recordLength);



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