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

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

commit c94093684622a2a05d06e9225fd5cc1166814038
Author: tallison <[email protected]>
AuthorDate: Wed Feb 28 09:41:08 2024 -0500

    TIKA-4204 -- improve lookup of dataspace/storage items
    
    (cherry picked from commit eefe884c81a2a94c212e5ed9aa5bbb659e653782)
---
 .../java/org/apache/tika/parser/microsoft/chm/ChmCommons.java | 11 +++++++----
 .../org/apache/tika/parser/microsoft/chm/ChmExtractor.java    |  2 +-
 .../org/apache/tika/parser/microsoft/chm/ChmPmgiHeader.java   |  2 +-
 .../org/apache/tika/parser/microsoft/chm/TestChmLzxState.java |  2 +-
 4 files changed, 10 insertions(+), 7 deletions(-)

diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmCommons.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmCommons.java
index 4af06e446..bb0de014c 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmCommons.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmCommons.java
@@ -222,7 +222,7 @@ public class ChmCommons {
      */
     public static final int indexOfResetTableBlock(byte[] text, byte[] pattern)
             throws ChmParsingException {
-        return (indexOf(text, pattern)) - 4;
+        return (indexOfDataSpaceStorageElement(text, pattern)) - 4;
     }
 
     /**
@@ -233,7 +233,7 @@ public class ChmCommons {
      * @return an index, if nothing found returns -1
      * @throws ChmParsingException
      */
-    public static int indexOf(byte[] text, byte[] pattern) throws 
ChmParsingException {
+    public static int indexOfDataSpaceStorageElement(byte[] text, byte[] 
pattern) throws ChmParsingException {
         int[] next = null;
         int i = 0, j = -1;
 
@@ -281,15 +281,18 @@ public class ChmCommons {
 
     /**
      * Searches for some pattern in the directory listing entry list
+     * This requires that the entry name start with "::DataSpaceStorage"
+     * See TIKA-4204
      *
      * @param list
      * @param pattern
      * @return an index, if nothing found returns -1
      */
-    public static int indexOf(List<DirectoryListingEntry> list, String 
pattern) {
+    public static int 
indexOfDataSpaceStorageElement(List<DirectoryListingEntry> list, String 
pattern) {
         int place = 0;
         for (DirectoryListingEntry directoryListingEntry : list) {
-            if (directoryListingEntry.toString().contains(pattern)) {
+            if 
(directoryListingEntry.getName().startsWith("::DataSpace/Storage") &&
+                    directoryListingEntry.getName().contains(pattern)) {
                 return place;
             }
             ++place;
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmExtractor.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmExtractor.java
index ba1738b65..7081f6bc7 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmExtractor.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmExtractor.java
@@ -119,7 +119,7 @@ public class ChmExtractor {
             getChmLzxcResetTable().parse(dir_chunk, getChmLzxcResetTable());
 
             setIndexOfContent(ChmCommons
-                    .indexOf(getChmDirList().getDirectoryListingEntryList(), 
ChmConstants.CONTENT));
+                    
.indexOfDataSpaceStorageElement(getChmDirList().getDirectoryListingEntryList(), 
ChmConstants.CONTENT));
             setLzxBlockOffset(
                     
(getChmDirList().getDirectoryListingEntryList().get(getIndexOfContent())
                             .getOffset() + 
getChmItsfHeader().getDataOffset()));
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmPmgiHeader.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmPmgiHeader.java
index ccd59bbee..a57e03d5b 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmPmgiHeader.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmPmgiHeader.java
@@ -73,7 +73,7 @@ public class ChmPmgiHeader implements 
ChmAccessor<ChmPmgiHeader> {
         ChmAssert.assertChmAccessorNotNull(chmPmgiHeader);
         ChmAssert.assertPositiveInt(count);
         this.setDataRemained(data.length);
-        index = ChmCommons.indexOf(data, 
ChmConstants.CHM_PMGI_MARKER.getBytes(UTF_8));
+        index = ChmCommons.indexOfDataSpaceStorageElement(data, 
ChmConstants.CHM_PMGI_MARKER.getBytes(UTF_8));
 
         if (index >= 0) {
             System.arraycopy(data, index, chmPmgiHeader.getSignature(), 0, 
count);
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/java/org/apache/tika/parser/microsoft/chm/TestChmLzxState.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/java/org/apache/tika/parser/microsoft/chm/TestChmLzxState.java
index d9c3da81d..e95047a43 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/java/org/apache/tika/parser/microsoft/chm/TestChmLzxState.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/java/org/apache/tika/parser/microsoft/chm/TestChmLzxState.java
@@ -53,7 +53,7 @@ public class TestChmLzxState {
         ChmDirectoryListingSet chmDirListCont =
                 new ChmDirectoryListingSet(data, chmItsHeader, chmItspHeader);
         int indexOfControlData = ChmCommons
-                .indexOf(chmDirListCont.getDirectoryListingEntryList(), 
ChmConstants.CONTROL_DATA);
+                
.indexOfDataSpaceStorageElement(chmDirListCont.getDirectoryListingEntryList(), 
ChmConstants.CONTROL_DATA);
 
         int indexOfResetTable =
                 ChmCommons.indexOfResetTableBlock(data, 
ChmConstants.LZXC.getBytes(UTF_8));

Reply via email to