This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch branch_1x
in repository https://gitbox.apache.org/repos/asf/tika.git

commit ffb48dd29d0c2009490caefda75e5b57c7958c51
Author: tballison <talli...@mitre.org>
AuthorDate: Mon Apr 16 14:03:15 2018 -0400

    fix chm parser
---
 .../tika/parser/chm/accessor/ChmDirectoryListingSet.java     | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git 
a/tika-parsers/src/main/java/org/apache/tika/parser/chm/accessor/ChmDirectoryListingSet.java
 
b/tika-parsers/src/main/java/org/apache/tika/parser/chm/accessor/ChmDirectoryListingSet.java
index ccb3286..b379142 100644
--- 
a/tika-parsers/src/main/java/org/apache/tika/parser/chm/accessor/ChmDirectoryListingSet.java
+++ 
b/tika-parsers/src/main/java/org/apache/tika/parser/chm/accessor/ChmDirectoryListingSet.java
@@ -20,7 +20,9 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 
 import java.math.BigInteger;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.parser.chm.core.ChmCommons;
@@ -137,6 +139,7 @@ public class ChmDirectoryListingSet {
 
             /* loops over all pmgls */
             byte[] dir_chunk = null;
+            Set<Integer> processed = new HashSet<>();
             for (int i = startPmgl; i>=0; ) {
                 dir_chunk = new byte[(int) chmItspHeader.getBlock_len()];
                 int start = i * (int) chmItspHeader.getBlock_len() + 
dir_offset;
@@ -147,10 +150,15 @@ public class ChmDirectoryListingSet {
                 PMGLheader = new ChmPmglHeader();
                 PMGLheader.parse(dir_chunk, PMGLheader);
                 enumerateOneSegment(dir_chunk);
-                
-                i=PMGLheader.getBlockNext();
+                int nextBlock = PMGLheader.getBlockNext();
+                processed.add(i);
+                if (processed.contains(nextBlock)) {
+                    throw new ChmParsingException("already processed block; 
avoiding cycle");
+                }
+                i=nextBlock;
                 dir_chunk = null;
             }
+            System.out.println("done");
         } catch (ChmParsingException e) {
             LOG.warn("Chm parse exception", e);
         } finally {

-- 
To stop receiving notification emails like this one, please contact
talli...@apache.org.

Reply via email to