aboutsummaryrefslogtreecommitdiffstats
path: root/poi
diff options
context:
space:
mode:
authorTim Allison <tallison@apache.org>2023-09-20 20:32:59 +0000
committerTim Allison <tallison@apache.org>2023-09-20 20:32:59 +0000
commit99117381e59d9a7f2abe27784009358c672c0ae3 (patch)
tree190b7ef61d91f9579bd7605d1a2c45cf142ea674 /poi
parentce919673c4e935e8c756c91938f973d5c9a23ddb (diff)
downloadpoi-99117381e59d9a7f2abe27784009358c672c0ae3.tar.gz
poi-99117381e59d9a7f2abe27784009358c672c0ae3.zip
Bug47950 -- make stream/directory name lookup in OLE2 case insensitive
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1912438 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poi')
-rw-r--r--poi/src/main/java/org/apache/poi/POIDocument.java10
-rw-r--r--poi/src/main/java/org/apache/poi/extractor/ExtractorFactory.java6
-rw-r--r--poi/src/main/java/org/apache/poi/extractor/MainExtractorFactory.java13
-rw-r--r--poi/src/main/java/org/apache/poi/hpsf/PropertySet.java4
-rw-r--r--poi/src/main/java/org/apache/poi/hssf/eventusermodel/HSSFEventFactory.java14
-rw-r--r--poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java5
-rw-r--r--poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java15
-rw-r--r--poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java3
-rw-r--r--poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java2
-rw-r--r--poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java26
-rw-r--r--poi/src/main/java/org/apache/poi/poifs/crypt/DataSpaceMapUtils.java8
-rw-r--r--poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java6
-rw-r--r--poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java26
-rw-r--r--poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryNode.java116
-rw-r--r--poi/src/main/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java2
-rw-r--r--poi/src/main/java/org/apache/poi/poifs/filesystem/FilteringDirectoryNode.java24
-rw-r--r--poi/src/main/java/org/apache/poi/poifs/filesystem/Ole10Native.java4
-rw-r--r--poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java2
-rw-r--r--poi/src/main/java/org/apache/poi/sl/usermodel/ObjectShape.java2
-rw-r--r--poi/src/main/java/org/apache/poi/sl/usermodel/SlideShowFactory.java6
-rw-r--r--poi/src/main/java/org/apache/poi/ss/extractor/EmbeddedExtractor.java8
-rw-r--r--poi/src/main/java/org/apache/poi/ss/usermodel/WorkbookFactory.java6
-rw-r--r--poi/src/test/java/org/apache/poi/hpsf/basic/TestReadAllFiles.java2
-rw-r--r--poi/src/test/java/org/apache/poi/hpsf/basic/TestWrite.java24
-rw-r--r--poi/src/test/java/org/apache/poi/hpsf/basic/TestWriteWellKnown.java2
-rw-r--r--poi/src/test/java/org/apache/poi/hssf/extractor/TestExcelExtractor.java10
-rw-r--r--poi/src/test/java/org/apache/poi/hssf/usermodel/TestBugs.java2
-rw-r--r--poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java2
-rw-r--r--poi/src/test/java/org/apache/poi/hssf/usermodel/TestNonStandardWorkbookStreamNames.java3
-rw-r--r--poi/src/test/java/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java2
-rw-r--r--poi/src/test/java/org/apache/poi/poifs/filesystem/ReaderWriter.java2
-rw-r--r--poi/src/test/java/org/apache/poi/poifs/filesystem/TestDirectoryNode.java10
-rw-r--r--poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocument.java4
-rw-r--r--poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocumentInputStream.java12
-rw-r--r--poi/src/test/java/org/apache/poi/poifs/filesystem/TestEmptyDocument.java4
-rw-r--r--poi/src/test/java/org/apache/poi/poifs/filesystem/TestEntryUtils.java44
-rw-r--r--poi/src/test/java/org/apache/poi/poifs/filesystem/TestFilteringDirectoryNode.java72
-rw-r--r--poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSFileSystem.java2
-rw-r--r--poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSMiniStore.java4
-rw-r--r--poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSStream.java168
-rw-r--r--poi/src/test/java/org/apache/poi/poifs/filesystem/TestPropertySorter.java4
41 files changed, 403 insertions, 278 deletions
diff --git a/poi/src/main/java/org/apache/poi/POIDocument.java b/poi/src/main/java/org/apache/poi/POIDocument.java
index c7e4536b3b..ab312bccd3 100644
--- a/poi/src/main/java/org/apache/poi/POIDocument.java
+++ b/poi/src/main/java/org/apache/poi/POIDocument.java
@@ -222,7 +222,7 @@ public abstract class POIDocument implements Closeable {
if (encryptionInfo != null && encryptionInfo.isDocPropsEncrypted()) {
step = "getting encrypted";
String encryptedStream = getEncryptedPropertyStreamName();
- if (!dirNode.hasEntry(encryptedStream)) {
+ if (!dirNode.hasEntryCaseInsensitive(encryptedStream)) {
throw new EncryptedDocumentException("can't find encrypted property stream '"+encryptedStream+"'");
}
CryptoAPIDecryptor dec = (CryptoAPIDecryptor)encryptionInfo.getDecryptor();
@@ -231,13 +231,13 @@ public abstract class POIDocument implements Closeable {
}
//directory can be null when creating new documents
- if (dirNode == null || !dirNode.hasEntry(setName)) {
+ if (dirNode == null || !dirNode.hasEntryCaseInsensitive(setName)) {
return null;
}
// Find the entry, and get an input stream for it
step = "getting";
- try (DocumentInputStream dis = dirNode.createDocumentInputStream(dirNode.getEntry(setName))) {
+ try (DocumentInputStream dis = dirNode.createDocumentInputStream(dirNode.getEntryCaseInsensitive(setName))) {
// Create the Property Set
step = "creating";
return PropertySetFactory.create(dis);
@@ -302,8 +302,8 @@ public abstract class POIDocument implements Closeable {
writePropertySet(DocumentSummaryInformation.DEFAULT_STREAM_NAME, newDocumentSummaryInformation(), outFS);
// remove summary, if previously available
- if (outFS.getRoot().hasEntry(SummaryInformation.DEFAULT_STREAM_NAME)) {
- outFS.getRoot().getEntry(SummaryInformation.DEFAULT_STREAM_NAME).delete();
+ if (outFS.getRoot().hasEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME)) {
+ outFS.getRoot().getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME).delete();
}
CryptoAPIEncryptor enc = (CryptoAPIEncryptor) encGen;
try {
diff --git a/poi/src/main/java/org/apache/poi/extractor/ExtractorFactory.java b/poi/src/main/java/org/apache/poi/extractor/ExtractorFactory.java
index b3c6ef0514..21e61e572a 100644
--- a/poi/src/main/java/org/apache/poi/extractor/ExtractorFactory.java
+++ b/poi/src/main/java/org/apache/poi/extractor/ExtractorFactory.java
@@ -222,7 +222,7 @@ public final class ExtractorFactory {
POIFSFileSystem poifs = new POIFSFileSystem(is);
DirectoryNode root = poifs.getRoot();
- boolean isOOXML = root.hasEntry(DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE);
+ boolean isOOXML = root.hasEntryCaseInsensitive(DEFAULT_POIFS_ENTRY) || root.hasEntryCaseInsensitive(OOXML_PACKAGE);
return wp(isOOXML ? FileMagic.OOXML : fm, w -> w.create(root, password));
}
@@ -267,7 +267,7 @@ public final class ExtractorFactory {
try {
poifs = new POIFSFileSystem(file, true);
DirectoryNode root = poifs.getRoot();
- boolean isOOXML = root.hasEntry(DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE);
+ boolean isOOXML = root.hasEntryCaseInsensitive(DEFAULT_POIFS_ENTRY) || root.hasEntryCaseInsensitive(OOXML_PACKAGE);
return wp(isOOXML ? FileMagic.OOXML : fm, w -> w.create(root, password));
} catch (IOException | RuntimeException e) {
IOUtils.closeQuietly(poifs);
@@ -313,7 +313,7 @@ public final class ExtractorFactory {
*/
public static POITextExtractor createExtractor(final DirectoryNode root, String password) throws IOException {
// Encrypted OOXML files go inside OLE2 containers, is this one?
- if (root.hasEntry(DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE)) {
+ if (root.hasEntryCaseInsensitive(DEFAULT_POIFS_ENTRY) || root.hasEntryCaseInsensitive(OOXML_PACKAGE)) {
return wp(FileMagic.OOXML, w -> w.create(root, password));
} else {
return wp(FileMagic.OLE2, w -> w.create(root, password));
diff --git a/poi/src/main/java/org/apache/poi/extractor/MainExtractorFactory.java b/poi/src/main/java/org/apache/poi/extractor/MainExtractorFactory.java
index 89815bfd9e..eba21972d9 100644
--- a/poi/src/main/java/org/apache/poi/extractor/MainExtractorFactory.java
+++ b/poi/src/main/java/org/apache/poi/extractor/MainExtractorFactory.java
@@ -17,7 +17,7 @@
package org.apache.poi.extractor;
-import static org.apache.poi.hssf.model.InternalWorkbook.WORKBOOK_DIR_ENTRY_NAMES;
+import static org.apache.poi.hssf.model.InternalWorkbook.WORKBOOK_DIR_ENTRY_NAMES_CASE_INSENSITIVE;
import java.io.File;
import java.io.IOException;
@@ -59,16 +59,17 @@ public class MainExtractorFactory implements ExtractorProvider {
try {
Biff8EncryptionKey.setCurrentUserPassword(password);
+ if (poifsDir.hasEntry(InternalWorkbook.OLD_WORKBOOK_DIR_ENTRY_NAME)) {
+ return new OldExcelExtractor(poifsDir);
+ }
+
// Look for certain entries in the stream, to figure it out from
- for (String workbookName : WORKBOOK_DIR_ENTRY_NAMES) {
- if (poifsDir.hasEntry(workbookName)) {
+ for (String workbookName : WORKBOOK_DIR_ENTRY_NAMES_CASE_INSENSITIVE) {
+ if (poifsDir.hasEntryCaseInsensitive(workbookName)) {
return ExtractorFactory.getPreferEventExtractor() ? new EventBasedExcelExtractor(poifsDir) : new ExcelExtractor(poifsDir);
}
}
- if (poifsDir.hasEntry(InternalWorkbook.OLD_WORKBOOK_DIR_ENTRY_NAME)) {
- return new OldExcelExtractor(poifsDir);
- }
} finally {
Biff8EncryptionKey.setCurrentUserPassword(oldPW);
}
diff --git a/poi/src/main/java/org/apache/poi/hpsf/PropertySet.java b/poi/src/main/java/org/apache/poi/hpsf/PropertySet.java
index 5bd4cd6b44..39d259d14a 100644
--- a/poi/src/main/java/org/apache/poi/hpsf/PropertySet.java
+++ b/poi/src/main/java/org/apache/poi/hpsf/PropertySet.java
@@ -575,8 +575,8 @@ public class PropertySet {
public void write(final DirectoryEntry dir, final String name)
throws WritingNotSupportedException, IOException {
/* If there is already an entry with the same name, remove it. */
- if (dir.hasEntry(name)) {
- final Entry e = dir.getEntry(name);
+ if (dir.hasEntryCaseInsensitive(name)) {
+ final Entry e = dir.getEntryCaseInsensitive(name);
e.delete();
}
diff --git a/poi/src/main/java/org/apache/poi/hssf/eventusermodel/HSSFEventFactory.java b/poi/src/main/java/org/apache/poi/hssf/eventusermodel/HSSFEventFactory.java
index dafa88c1cd..309c3a5e8f 100644
--- a/poi/src/main/java/org/apache/poi/hssf/eventusermodel/HSSFEventFactory.java
+++ b/poi/src/main/java/org/apache/poi/hssf/eventusermodel/HSSFEventFactory.java
@@ -24,6 +24,9 @@ import java.util.Set;
import org.apache.poi.hssf.record.*;
import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+
+import static org.apache.poi.hssf.model.InternalWorkbook.BOOK;
+import static org.apache.poi.hssf.model.InternalWorkbook.WORKBOOK;
import static org.apache.poi.hssf.model.InternalWorkbook.WORKBOOK_DIR_ENTRY_NAMES;
/**
@@ -64,13 +67,12 @@ public class HSSFEventFactory {
public void processWorkbookEvents(HSSFRequest req, DirectoryNode dir) throws IOException {
// some old documents have "WORKBOOK" or "BOOK"
String name = null;
- Set<String> entryNames = dir.getEntryNames();
- for (String potentialName : WORKBOOK_DIR_ENTRY_NAMES) {
- if (entryNames.contains(potentialName)) {
- name = potentialName;
- break;
- }
+ if (dir.hasEntry(WORKBOOK)) {
+ name = WORKBOOK;
+ } else if (dir.hasEntry(BOOK)) {
+ name = BOOK;
}
+
// If in doubt, go for the default
if (name == null) {
name = WORKBOOK_DIR_ENTRY_NAMES.get(0);
diff --git a/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java b/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java
index 80b715a59b..1db03f80bc 100644
--- a/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java
+++ b/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java
@@ -18,6 +18,7 @@
package org.apache.poi.hssf.extractor;
import static org.apache.poi.hssf.model.InternalWorkbook.OLD_WORKBOOK_DIR_ENTRY_NAME;
+import static org.apache.poi.hssf.model.InternalWorkbook.WORKBOOK;
import static org.apache.poi.hssf.model.InternalWorkbook.WORKBOOK_DIR_ENTRY_NAMES;
import java.io.BufferedInputStream;
@@ -150,14 +151,14 @@ public class OldExcelExtractor implements POITextExtractor {
private void open(DirectoryNode directory) throws IOException {
DocumentNode book;
try {
- Entry entry = directory.getEntry(OLD_WORKBOOK_DIR_ENTRY_NAME);
+ Entry entry = directory.getEntryCaseInsensitive(OLD_WORKBOOK_DIR_ENTRY_NAME);
if (!(entry instanceof DocumentNode)) {
throw new IllegalArgumentException("Did not have an Excel 5/95 Book stream: " + entry);
}
book = (DocumentNode) entry;
} catch (FileNotFoundException | IllegalArgumentException e) {
// some files have "Workbook" instead
- Entry entry = directory.getEntry(WORKBOOK_DIR_ENTRY_NAMES.get(0));
+ Entry entry = directory.getEntryCaseInsensitive(WORKBOOK);
if (!(entry instanceof DocumentNode)) {
throw new IllegalArgumentException("Did not have an Excel 5/95 Book stream: " + entry);
}
diff --git a/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java b/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java
index 39ea0530a4..acd3541cf7 100644
--- a/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java
+++ b/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java
@@ -87,7 +87,7 @@ public final class InternalWorkbook {
/**
* Normally, the Workbook will be in a POIFS Stream called
* "Workbook". However, some weird XLS generators use "WORKBOOK"
- * or "BOOK".
+ * or "BOOK". This includes common case sensitive variations.
*/
public static final List<String> WORKBOOK_DIR_ENTRY_NAMES = Collections.unmodifiableList(
Arrays.asList(
@@ -99,6 +99,19 @@ public final class InternalWorkbook {
);
/**
+ * Crystal exports may use this for a regular .xls file. This
+ * needs to be distinguished case sensitively from {@link #OLD_WORKBOOK_DIR_ENTRY_NAME}.
+ */
+ public static final String BOOK = "BOOK";
+
+ public static final String WORKBOOK = "WORKBOOK";
+
+ public static final List<String> WORKBOOK_DIR_ENTRY_NAMES_CASE_INSENSITIVE =
+ Collections.unmodifiableList(
+ Arrays.asList(WORKBOOK, BOOK)
+ );
+
+ /**
* Name of older (pre-Excel 97) Workbook streams, which
* aren't supported by HSSFWorkbook, only by
* {@link OldExcelExtractor}
diff --git a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java
index 27ea1deebe..5c1bdee1ef 100644
--- a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java
+++ b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java
@@ -19,7 +19,6 @@
package org.apache.poi.hssf.usermodel;
import java.io.IOException;
-import java.util.Iterator;
import org.apache.poi.ddf.*;
import org.apache.poi.hssf.record.*;
@@ -56,7 +55,7 @@ public final class HSSFObjectData extends HSSFPicture implements ObjectData {
int streamId = subRecord.getStreamId().intValue();
String streamName = "MBD" + HexDump.toHex(streamId);
- Entry entry = _root.getEntry(streamName);
+ Entry entry = _root.getEntryCaseInsensitive(streamName);
if (entry instanceof DirectoryEntry) {
return (DirectoryEntry) entry;
}
diff --git a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java
index 716e215bbc..dc64f10f5e 100644
--- a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java
+++ b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java
@@ -290,7 +290,7 @@ public final class HSSFPatriarch implements HSSFShapeContainer, Drawing<HSSFShap
if (dn == null) {
throw new FileNotFoundException();
}
- oleRoot = (DirectoryEntry)dn.getEntry(entryName);
+ oleRoot = (DirectoryEntry)dn.getEntryCaseInsensitive(entryName);
} catch (FileNotFoundException e) {
throw new IllegalStateException("trying to add ole shape without actually adding data first - use HSSFWorkbook.addOlePackage first", e);
}
diff --git a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
index 6c4c84b56e..336fc2bc3e 100644
--- a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
+++ b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
@@ -18,7 +18,9 @@
package org.apache.poi.hssf.usermodel;
import static org.apache.logging.log4j.util.Unbox.box;
+import static org.apache.poi.hssf.model.InternalWorkbook.BOOK;
import static org.apache.poi.hssf.model.InternalWorkbook.OLD_WORKBOOK_DIR_ENTRY_NAME;
+import static org.apache.poi.hssf.model.InternalWorkbook.WORKBOOK;
import static org.apache.poi.hssf.model.InternalWorkbook.WORKBOOK_DIR_ENTRY_NAMES;
import java.io.BufferedOutputStream;
@@ -285,26 +287,30 @@ public final class HSSFWorkbook extends POIDocument implements Workbook {
}
public static String getWorkbookDirEntryName(DirectoryNode directory) {
- for (String wbName : WORKBOOK_DIR_ENTRY_NAMES) {
- if (directory.hasEntry(wbName)) {
- return wbName;
- }
+ if (directory.hasEntryCaseInsensitive(WORKBOOK)) {
+ return WORKBOOK;
}
// check for an encrypted .xlsx file - they get OLE2 wrapped
- if (directory.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY)) {
+ if (directory.hasEntryCaseInsensitive(Decryptor.DEFAULT_POIFS_ENTRY)) {
throw new EncryptedDocumentException("The supplied spreadsheet seems to be an Encrypted .xlsx file. " +
"It must be decrypted before use by XSSF, it cannot be used by HSSF");
}
- // check for previous version of file format
+ // check case-sensitive for previous version of file format
if (directory.hasEntry(OLD_WORKBOOK_DIR_ENTRY_NAME)) {
throw new OldExcelFormatException("The supplied spreadsheet seems to be Excel 5.0/7.0 (BIFF5) format. "
+ "POI only supports BIFF8 format (from Excel versions 97/2000/XP/2003)");
}
+ //check for non-case-sensitive book (e.g. crystal) after ruling out case-sensitive
+ // OldExcelFormatException
+ if (directory.hasEntryCaseInsensitive(BOOK)) {
+ return BOOK;
+ }
+
// throw more useful exceptions for known wrong file-extensions
- if (directory.hasEntry("WordDocument")) {
+ if (directory.hasEntryCaseInsensitive("WordDocument")) {
throw new IllegalArgumentException("The document is really a DOC file");
}
@@ -1350,7 +1356,7 @@ public final class HSSFWorkbook extends POIDocument implements Workbook {
final DirectoryNode dir = getDirectory();
// Update the Workbook stream in the file
- DocumentNode workbookNode = (DocumentNode) dir.getEntry(
+ DocumentNode workbookNode = (DocumentNode) dir.getEntryCaseInsensitive(
getWorkbookDirEntryName(dir));
POIFSDocument workbookDoc = new POIFSDocument(workbookNode);
workbookDoc.replaceContents(UnsynchronizedByteArrayInputStream.builder().setByteArray(getBytes()).get());
@@ -2104,7 +2110,7 @@ public final class HSSFWorkbook extends POIDocument implements Workbook {
DirectoryNode root = poiData.getRoot();
Map<String, ClassID> olemap = getOleMap();
for (Map.Entry<String, ClassID> entry : olemap.entrySet()) {
- if (root.hasEntry(entry.getKey())) {
+ if (root.hasEntryCaseInsensitive(entry.getKey())) {
root.setStorageClsid(entry.getValue());
break;
}
@@ -2129,7 +2135,7 @@ public final class HSSFWorkbook extends POIDocument implements Workbook {
DirectoryEntry oleDir = null;
do {
String storageStr = "MBD" + HexDump.toHex(++storageId);
- if (!getDirectory().hasEntry(storageStr)) {
+ if (!getDirectory().hasEntryCaseInsensitive(storageStr)) {
oleDir = getDirectory().createDirectory(storageStr);
oleDir.setStorageClsid(ClassIDPredefined.OLE_V1_PACKAGE.getClassID());
}
diff --git a/poi/src/main/java/org/apache/poi/poifs/crypt/DataSpaceMapUtils.java b/poi/src/main/java/org/apache/poi/poifs/crypt/DataSpaceMapUtils.java
index a904214121..bcbebd7ed6 100644
--- a/poi/src/main/java/org/apache/poi/poifs/crypt/DataSpaceMapUtils.java
+++ b/poi/src/main/java/org/apache/poi/poifs/crypt/DataSpaceMapUtils.java
@@ -61,8 +61,8 @@ public class DataSpaceMapUtils {
public static DocumentEntry createEncryptionEntry(DirectoryEntry dir, String path, EncryptionRecord out) throws IOException {
String[] parts = path.split("/");
for (int i=0; i<parts.length-1; i++) {
- dir = dir.hasEntry(parts[i])
- ? (DirectoryEntry)dir.getEntry(parts[i])
+ dir = dir.hasEntryCaseInsensitive(parts[i])
+ ? (DirectoryEntry)dir.getEntryCaseInsensitive(parts[i])
: dir.createDirectory(parts[i]);
}
@@ -72,8 +72,8 @@ public class DataSpaceMapUtils {
String fileName = parts[parts.length-1];
- if (dir.hasEntry(fileName)) {
- dir.getEntry(fileName).delete();
+ if (dir.hasEntryCaseInsensitive(fileName)) {
+ dir.getEntryCaseInsensitive(fileName).delete();
}
return dir.createDocument(fileName, bos.getWriteIndex(), event -> {
diff --git a/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java b/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
index 3698c57b7e..ed0cf12372 100644
--- a/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
+++ b/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
@@ -173,9 +173,9 @@ public class CryptoAPIDecryptor extends Decryptor {
throws IOException, GeneralSecurityException {
POIFSFileSystem fsOut = null;
try (
- DocumentInputStream dis = root.createDocumentInputStream(root.getEntry(encryptedStream));
- CryptoAPIDocumentInputStream sbis = new CryptoAPIDocumentInputStream(this, IOUtils.toByteArray(dis));
- LittleEndianInputStream leis = new LittleEndianInputStream(sbis)
+ DocumentInputStream dis = root.createDocumentInputStream(root.getEntryCaseInsensitive(encryptedStream));
+ CryptoAPIDocumentInputStream sbis = new CryptoAPIDocumentInputStream(this, IOUtils.toByteArray(dis));
+ LittleEndianInputStream leis = new LittleEndianInputStream(sbis)
) {
int streamDescriptorArrayOffset = (int) leis.readUInt();
/* int streamDescriptorArraySize = (int) */ leis.readUInt();
diff --git a/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java b/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java
index 2c99782af9..2ede110ec5 100644
--- a/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java
+++ b/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java
@@ -76,14 +76,20 @@ public interface DirectoryEntry extends Entry, Iterable<Entry> {
int getEntryCount();
+
/**
- * Checks if entry with specified name present
+ * Checks if entry with specified name present, case sensitive
*/
-
boolean hasEntry( final String name );
/**
- * get a specified Entry by name
+ * Checks if entry with specified name present, case sensitive
+ */
+
+ boolean hasEntryCaseInsensitive(final String name );
+
+ /**
+ * get a specified Entry by name, case sensitive
*
* @param name the name of the Entry to obtain.
*
@@ -97,6 +103,20 @@ public interface DirectoryEntry extends Entry, Iterable<Entry> {
Entry getEntry(final String name) throws FileNotFoundException;
/**
+ * get a specified Entry by name, case insensitive
+ *
+ * @param name the name of the Entry to obtain.
+ *
+ * @return the specified Entry, if it is directly contained in
+ * this DirectoryEntry
+ *
+ * @throws FileNotFoundException if no Entry with the specified
+ * name exists in this DirectoryEntry
+ */
+
+ Entry getEntryCaseInsensitive(final String name) throws FileNotFoundException;
+
+ /**
* create a new DocumentEntry
*
* @param name the name of the new DocumentEntry
diff --git a/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryNode.java b/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryNode.java
index 54fab5f498..6e7f7508d0 100644
--- a/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryNode.java
+++ b/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryNode.java
@@ -23,9 +23,12 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.Spliterator;
@@ -40,13 +43,16 @@ import org.apache.poi.poifs.property.Property;
* Simple implementation of DirectoryEntry
*/
public class DirectoryNode
- extends EntryNode
- implements DirectoryEntry, POIFSViewable, Iterable<Entry>
+ extends EntryNode
+ implements DirectoryEntry, POIFSViewable, Iterable<Entry>
{
- // Map of Entry instances, keyed by their names
+ // Map of Entry instances, keyed by their literal names as stored
private final Map<String,Entry> _byname = new HashMap<>();
+ // Map of Entry instances, keyed by their Uppercased names
+ private final Map<String,Entry> _byUCName = new HashMap<>();
+
// Our list of entries, kept sorted to preserve order
private final ArrayList<Entry> _entries = new ArrayList<>();
@@ -100,6 +106,7 @@ public class DirectoryNode
}
_entries.add(childNode);
_byname.put(childNode.getName(), childNode);
+ _byUCName.put(childNode.getName().toUpperCase(Locale.ROOT), childNode);
}
}
@@ -132,9 +139,9 @@ public class DirectoryNode
*/
public DocumentInputStream createDocumentInputStream(
final String documentName)
- throws IOException
+ throws IOException
{
- return createDocumentInputStream(getEntry(documentName));
+ return createDocumentInputStream(getEntryCaseInsensitive(documentName));
}
/**
@@ -149,11 +156,11 @@ public class DirectoryNode
*/
public DocumentInputStream createDocumentInputStream(
final Entry document)
- throws IOException
+ throws IOException
{
if (!document.isDocumentEntry()) {
throw new IOException("Entry '" + document.getName()
- + "' is not a DocumentEntry");
+ + "' is not a DocumentEntry");
}
DocumentEntry entry = (DocumentEntry)document;
@@ -170,7 +177,7 @@ public class DirectoryNode
* @throws IOException if the document can't be created
*/
DocumentEntry createDocument(final POIFSDocument document)
- throws IOException
+ throws IOException
{
DocumentProperty property = document.getDocumentProperty();
DocumentNode rval = new DocumentNode(property, this);
@@ -180,6 +187,7 @@ public class DirectoryNode
_entries.add(rval);
_byname.put(property.getName(), rval);
+ _byUCName.put(property.getName().toUpperCase(Locale.ROOT), rval);
return rval;
}
@@ -194,16 +202,18 @@ public class DirectoryNode
boolean changeName(final String oldName, final String newName)
{
boolean rval = false;
- EntryNode child = ( EntryNode ) _byname.get(oldName);
+ EntryNode child = ( EntryNode ) _byUCName.get(oldName.toUpperCase(Locale.ROOT));
if (child != null)
{
rval = (( DirectoryProperty ) getProperty())
- .changeName(child.getProperty(), newName);
+ .changeName(child.getProperty(), newName);
if (rval)
{
_byname.remove(oldName);
_byname.put(child.getProperty().getName(), child);
+ _byUCName.remove(oldName.toUpperCase(Locale.ROOT));
+ _byUCName.put(child.getProperty().getName().toUpperCase(Locale.ROOT), child);
}
}
return rval;
@@ -220,13 +230,14 @@ public class DirectoryNode
boolean deleteEntry(final EntryNode entry)
{
boolean rval =
- (( DirectoryProperty ) getProperty())
- .deleteChild(entry.getProperty());
+ (( DirectoryProperty ) getProperty())
+ .deleteChild(entry.getProperty());
if (rval)
{
_entries.remove(entry);
_byname.remove(entry.getName());
+ _byUCName.remove(entry.getName().toUpperCase(Locale.ROOT));
try {
_filesystem.remove(entry);
@@ -258,9 +269,9 @@ public class DirectoryNode
}
/**
- * get the names of all the Entries contained directly in this
- * instance (in other words, names of children only; no grandchildren
- * etc).
+ * get the literal, case-sensitive names of all the Entries contained
+ * directly in this instance (in other words, names of children only;
+ * no grandchildren etc).
*
* @return the names of all the entries that may be retrieved with
* getEntry(String), which may be empty (if this
@@ -298,14 +309,32 @@ public class DirectoryNode
return _entries.size();
}
+ /**
+ * Checks for a specific entry in a case-sensitive way.
+ *
+ * @param name
+ * @return whether or not an entry exists for that name (case-sensitive)
+ */
+ @Override
+ public boolean hasEntry(String name )
+ {
+ return name != null && _byname.containsKey(name);
+ }
+
+ /**
+ * Checks for a specific entry in a case-insensitive way.
+ *
+ * @param name
+ * @return whether or not an entry exists for that name (case-insensitive)
+ */
@Override
- public boolean hasEntry( String name )
+ public boolean hasEntryCaseInsensitive(String name )
{
- return name != null && _byname.containsKey( name );
+ return name != null && _byUCName.containsKey(name.toUpperCase(Locale.ROOT));
}
/**
- * get a specified Entry by name
+ * get a specified Entry by name, case sensitive
*
* @param name the name of the Entry to obtain.
*
@@ -315,7 +344,6 @@ public class DirectoryNode
* @throws FileNotFoundException if no Entry with the specified
* name exists in this DirectoryEntry
*/
-
@Override
public Entry getEntry(final String name) throws FileNotFoundException {
Entry rval = null;
@@ -341,6 +369,41 @@ public class DirectoryNode
}
/**
+ * get a specified Entry by name, case-insensitive
+ *
+ * @param name the name of the Entry to obtain.
+ *
+ * @return the specified Entry, if it is directly contained in
+ * this DirectoryEntry
+ *
+ * @throws FileNotFoundException if no Entry with the specified
+ * name exists in this DirectoryEntry
+ */
+ @Override
+ public Entry getEntryCaseInsensitive(final String name) throws FileNotFoundException {
+ Entry rval = null;
+
+ if (name != null) {
+ rval = _byUCName.get(name.toUpperCase(Locale.ROOT));
+ }
+ if (rval == null) {
+ // throw more useful exceptions for known wrong file-extensions
+ if(_byname.containsKey("Workbook")) {
+ throw new IllegalArgumentException("The document is really a XLS file");
+ } else if(_byname.containsKey("PowerPoint Document")) {
+ throw new IllegalArgumentException("The document is really a PPT file");
+ } else if(_byname.containsKey("VisioDocument")) {
+ throw new IllegalArgumentException("The document is really a VSD file");
+ }
+
+ // either a null name was given, or there is no such name
+ throw new FileNotFoundException("no such entry: \"" + name
+ + "\", had: " + _byUCName.keySet());
+ }
+ return rval;
+ }
+
+ /**
* create a new DocumentEntry
*
* @param name the name of the new DocumentEntry
@@ -355,7 +418,7 @@ public class DirectoryNode
@Override
public DocumentEntry createDocument(final String name,
final InputStream stream)
- throws IOException
+ throws IOException
{
return createDocument(new POIFSDocument(name, _filesystem, stream));
}
@@ -375,7 +438,7 @@ public class DirectoryNode
@Override
public DocumentEntry createDocument(final String name, final int size,
final POIFSWriterListener writer)
- throws IOException
+ throws IOException
{
return createDocument(new POIFSDocument(name, size, _filesystem, writer));
}
@@ -392,16 +455,17 @@ public class DirectoryNode
@Override
public DirectoryEntry createDirectory(final String name)
- throws IOException
+ throws IOException
{
DirectoryProperty property = new DirectoryProperty(name);
DirectoryNode rval = new DirectoryNode(property, _filesystem, this);
- _filesystem.addDirectory(property);
+ _filesystem.addDirectory(property);
(( DirectoryProperty ) getProperty()).addChild(property);
_entries.add(rval);
_byname.put(name, rval);
+ _byUCName.put(name.toUpperCase(Locale.ROOT), rval);
return rval;
}
@@ -419,12 +483,12 @@ public class DirectoryNode
@SuppressWarnings("WeakerAccess")
public DocumentEntry createOrUpdateDocument(final String name,
final InputStream stream)
- throws IOException
+ throws IOException
{
- if (! hasEntry(name)) {
+ if (! hasEntryCaseInsensitive(name)) {
return createDocument(name, stream);
} else {
- DocumentNode existing = (DocumentNode)getEntry(name);
+ DocumentNode existing = (DocumentNode) getEntryCaseInsensitive(name);
POIFSDocument nDoc = new POIFSDocument(existing);
nDoc.replaceContents(stream);
return existing;
diff --git a/poi/src/main/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java b/poi/src/main/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java
index 088b549283..6b9b749362 100644
--- a/poi/src/main/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java
+++ b/poi/src/main/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java
@@ -73,7 +73,7 @@ public final class DocumentFactoryHelper {
public static InputStream getDecryptedStream(final DirectoryNode root, String password)
throws IOException {
// first check if the node contains an plain package
- if (root.hasEntry(OOXML_PACKAGE)) {
+ if (root.hasEntryCaseInsensitive(OOXML_PACKAGE)) {
return root.createDocumentInputStream(OOXML_PACKAGE);
}
diff --git a/poi/src/main/java/org/apache/poi/poifs/filesystem/FilteringDirectoryNode.java b/poi/src/main/java/org/apache/poi/poifs/filesystem/FilteringDirectoryNode.java
index 9b3c0150b0..f9410c0264 100644
--- a/poi/src/main/java/org/apache/poi/poifs/filesystem/FilteringDirectoryNode.java
+++ b/poi/src/main/java/org/apache/poi/poifs/filesystem/FilteringDirectoryNode.java
@@ -129,7 +129,7 @@ public class FilteringDirectoryNode implements DirectoryEntry
public int getEntryCount() {
int size = directory.getEntryCount();
for (String excl : excludes) {
- if (directory.hasEntry(excl)) {
+ if (directory.hasEntryCaseInsensitive(excl)) {
size--;
}
}
@@ -161,6 +161,15 @@ public class FilteringDirectoryNode implements DirectoryEntry
}
@Override
+ public boolean hasEntryCaseInsensitive(String name) {
+ if (excludes.contains(name)) {
+ return false;
+ }
+ return directory.hasEntryCaseInsensitive(name);
+ }
+
+
+ @Override
public Entry getEntry(String name) throws FileNotFoundException {
if (excludes.contains(name)) {
throw new FileNotFoundException(name);
@@ -169,6 +178,17 @@ public class FilteringDirectoryNode implements DirectoryEntry
Entry entry = directory.getEntry(name);
return wrapEntry(entry);
}
+
+ @Override
+ public Entry getEntryCaseInsensitive(String name) throws FileNotFoundException {
+ if (excludes.contains(name)) {
+ throw new FileNotFoundException(name);
+ }
+
+ Entry entry = directory.getEntryCaseInsensitive(name);
+ return wrapEntry(entry);
+ }
+
private Entry wrapEntry(Entry entry) {
String name = entry.getName();
if (childExcludes.containsKey(name) && entry instanceof DirectoryEntry) {
@@ -258,4 +278,4 @@ public class FilteringDirectoryNode implements DirectoryEntry
throw new UnsupportedOperationException("Remove not supported");
}
}
-} \ No newline at end of file
+}
diff --git a/poi/src/main/java/org/apache/poi/poifs/filesystem/Ole10Native.java b/poi/src/main/java/org/apache/poi/poifs/filesystem/Ole10Native.java
index 90fbc2433e..fef85f82db 100644
--- a/poi/src/main/java/org/apache/poi/poifs/filesystem/Ole10Native.java
+++ b/poi/src/main/java/org/apache/poi/poifs/filesystem/Ole10Native.java
@@ -133,7 +133,7 @@ public class Ole10Native {
* @throws Ole10NativeException on invalid or unexcepted data format
*/
public static Ole10Native createFromEmbeddedOleObject(DirectoryNode directory) throws IOException, Ole10NativeException {
- DocumentEntry nativeEntry = (DocumentEntry) directory.getEntry(OLE10_NATIVE);
+ DocumentEntry nativeEntry = (DocumentEntry) directory.getEntryCaseInsensitive(OLE10_NATIVE);
try (DocumentInputStream dis = directory.createDocumentInputStream(nativeEntry)) {
byte[] data = IOUtils.toByteArray(dis, nativeEntry.getSize(), MAX_RECORD_LENGTH);
return new Ole10Native(data, 0);
@@ -253,7 +253,7 @@ public class Ole10Native {
* OlePresXXX, but it seems, that they aren't necessary
*/
public static void createOleMarkerEntry(final DirectoryEntry parent) throws IOException {
- if (!parent.hasEntry(OLE_MARKER_NAME)) {
+ if (!parent.hasEntryCaseInsensitive(OLE_MARKER_NAME)) {
parent.createDocument(OLE_MARKER_NAME, UnsynchronizedByteArrayInputStream.builder().setByteArray(OLE_MARKER_BYTES).get());
}
}
diff --git a/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java b/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java
index 944c05bbd1..5d5081a8f2 100644
--- a/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java
+++ b/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java
@@ -325,7 +325,7 @@ public class VBAMacroReader implements Closeable {
//process the dirstream first -- "dir" is case insensitive
for (String entryName : macroDir.getEntryNames()) {
if ("dir".equalsIgnoreCase(entryName)) {
- processDirStream(macroDir.getEntry(entryName), modules);
+ processDirStream(macroDir.getEntryCaseInsensitive(entryName), modules);
break;
}
}
diff --git a/poi/src/main/java/org/apache/poi/sl/usermodel/ObjectShape.java b/poi/src/main/java/org/apache/poi/sl/usermodel/ObjectShape.java
index 8f6bd803e4..8fad23ee9e 100644
--- a/poi/src/main/java/org/apache/poi/sl/usermodel/ObjectShape.java
+++ b/poi/src/main/java/org/apache/poi/sl/usermodel/ObjectShape.java
@@ -113,7 +113,7 @@ public interface ObjectShape<
final DirectoryNode root = poifs.getRoot();
String entryName = null;
for (String n : names) {
- if (root.hasEntry(n)) {
+ if (root.hasEntryCaseInsensitive(n)) {
entryName = n;
break;
}
diff --git a/poi/src/main/java/org/apache/poi/sl/usermodel/SlideShowFactory.java b/poi/src/main/java/org/apache/poi/sl/usermodel/SlideShowFactory.java
index cb4c81ca77..b0aa16a89b 100644
--- a/poi/src/main/java/org/apache/poi/sl/usermodel/SlideShowFactory.java
+++ b/poi/src/main/java/org/apache/poi/sl/usermodel/SlideShowFactory.java
@@ -126,7 +126,7 @@ public final class SlideShowFactory {
*/
public static SlideShow<?,?> create(final DirectoryNode root, String password) throws IOException {
// Encrypted OOXML files go inside OLE2 containers, is this one?
- if (root.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE)) {
+ if (root.hasEntryCaseInsensitive(Decryptor.DEFAULT_POIFS_ENTRY) || root.hasEntryCaseInsensitive(OOXML_PACKAGE)) {
return wp(FileMagic.OOXML, w -> w.create(root, password));
} else {
return wp(FileMagic.OLE2, w -> w.create(root, password));
@@ -200,7 +200,7 @@ public final class SlideShowFactory {
POIFSFileSystem poifs = new POIFSFileSystem(is);
DirectoryNode root = poifs.getRoot();
- boolean isOOXML = root.hasEntry(DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE);
+ boolean isOOXML = root.hasEntryCaseInsensitive(DEFAULT_POIFS_ENTRY) || root.hasEntryCaseInsensitive(OOXML_PACKAGE);
return wp(isOOXML ? FileMagic.OOXML : fm, w -> w.create(poifs.getRoot(), password));
}
@@ -274,7 +274,7 @@ public final class SlideShowFactory {
final boolean ooxmlEnc;
try (POIFSFileSystem fs = new POIFSFileSystem(file, true)) {
DirectoryNode root = fs.getRoot();
- ooxmlEnc = root.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE);
+ ooxmlEnc = root.hasEntryCaseInsensitive(Decryptor.DEFAULT_POIFS_ENTRY) || root.hasEntryCaseInsensitive(OOXML_PACKAGE);
}
return wp(ooxmlEnc ? FileMagic.OOXML : fm, w -> w.create(file, password, readOnly));
} else {
diff --git a/poi/src/main/java/org/apache/poi/ss/extractor/EmbeddedExtractor.java b/poi/src/main/java/org/apache/poi/ss/extractor/EmbeddedExtractor.java
index 31c6632c07..b0b3cbd990 100644
--- a/poi/src/main/java/org/apache/poi/ss/extractor/EmbeddedExtractor.java
+++ b/poi/src/main/java/org/apache/poi/ss/extractor/EmbeddedExtractor.java
@@ -213,7 +213,7 @@ public class EmbeddedExtractor implements Iterable<EmbeddedExtractor> {
@Override
public boolean canExtract(DirectoryNode dn) {
ClassID clsId = dn.getStorageClsid();
- return (ClassIDPredefined.PDF.equals(clsId) || dn.hasEntry("CONTENTS"));
+ return (ClassIDPredefined.PDF.equals(clsId) || dn.hasEntryCaseInsensitive("CONTENTS"));
}
@Override
@@ -273,7 +273,7 @@ public class EmbeddedExtractor implements Iterable<EmbeddedExtractor> {
static class OOXMLExtractor extends EmbeddedExtractor {
@Override
public boolean canExtract(DirectoryNode dn) {
- return dn.hasEntry("package");
+ return dn.hasEntryCaseInsensitive("package");
}
@Override
@@ -312,14 +312,14 @@ public class EmbeddedExtractor implements Iterable<EmbeddedExtractor> {
ClassIDPredefined clsId = ClassIDPredefined.lookup(dn.getStorageClsid());
return (ClassIDPredefined.EXCEL_V7 == clsId
|| ClassIDPredefined.EXCEL_V8 == clsId
- || dn.hasEntry("Workbook") /*...*/);
+ || dn.hasEntryCaseInsensitive("Workbook") /*...*/);
}
protected boolean canExtractWord(DirectoryNode dn) {
ClassIDPredefined clsId = ClassIDPredefined.lookup(dn.getStorageClsid());
return (ClassIDPredefined.WORD_V7 == clsId
|| ClassIDPredefined.WORD_V8 == clsId
- || dn.hasEntry("WordDocument"));
+ || dn.hasEntryCaseInsensitive("WordDocument"));
}
@Override
diff --git a/poi/src/main/java/org/apache/poi/ss/usermodel/WorkbookFactory.java b/poi/src/main/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
index 707c045bab..34ac9afd3c 100644
--- a/poi/src/main/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
+++ b/poi/src/main/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
@@ -150,7 +150,7 @@ public final class WorkbookFactory {
*/
public static Workbook create(final DirectoryNode root, String password) throws IOException {
// Encrypted OOXML files go inside OLE2 containers, is this one?
- if (root.hasEntry(DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE)) {
+ if (root.hasEntryCaseInsensitive(DEFAULT_POIFS_ENTRY) || root.hasEntryCaseInsensitive(OOXML_PACKAGE)) {
return wp(FileMagic.OOXML, w -> w.create(root, password));
} else {
return wp(FileMagic.OLE2, w -> w.create(root, password));
@@ -230,7 +230,7 @@ public final class WorkbookFactory {
POIFSFileSystem poifs = new POIFSFileSystem(is);
DirectoryNode root = poifs.getRoot();
- boolean isOOXML = root.hasEntry(DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE);
+ boolean isOOXML = root.hasEntryCaseInsensitive(DEFAULT_POIFS_ENTRY) || root.hasEntryCaseInsensitive(OOXML_PACKAGE);
return wp(isOOXML ? FileMagic.OOXML : fm, w -> w.create(root, password));
}
@@ -313,7 +313,7 @@ public final class WorkbookFactory {
final boolean ooxmlEnc;
try (POIFSFileSystem fs = new POIFSFileSystem(file, true)) {
DirectoryNode root = fs.getRoot();
- ooxmlEnc = root.hasEntry(DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE);
+ ooxmlEnc = root.hasEntryCaseInsensitive(DEFAULT_POIFS_ENTRY) || root.hasEntryCaseInsensitive(OOXML_PACKAGE);
}
return wp(ooxmlEnc ? FileMagic.OOXML : fm, w -> w.create(file, password, readOnly));
} else {
diff --git a/poi/src/test/java/org/apache/poi/hpsf/basic/TestReadAllFiles.java b/poi/src/test/java/org/apache/poi/hpsf/basic/TestReadAllFiles.java
index 395aab02cf..cf13fd0474 100644
--- a/poi/src/test/java/org/apache/poi/hpsf/basic/TestReadAllFiles.java
+++ b/poi/src/test/java/org/apache/poi/hpsf/basic/TestReadAllFiles.java
@@ -154,7 +154,7 @@ class TestReadAllFiles {
* If there is a document summry information stream, read it from
* the POI filesystem.
*/
- if (dir.hasEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME)) {
+ if (dir.hasEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME)) {
final DocumentSummaryInformation dsi = TestWriteWellKnown.getDocumentSummaryInformation(poifs);
assertNotNull(dsi);
diff --git a/poi/src/test/java/org/apache/poi/hpsf/basic/TestWrite.java b/poi/src/test/java/org/apache/poi/hpsf/basic/TestWrite.java
index 48b8b594ec..442bcde58f 100644
--- a/poi/src/test/java/org/apache/poi/hpsf/basic/TestWrite.java
+++ b/poi/src/test/java/org/apache/poi/hpsf/basic/TestWrite.java
@@ -447,8 +447,8 @@ class TestWrite {
DirectoryEntry root = fs.getRoot();
// Read the properties in there
- DocumentNode sinfDoc = (DocumentNode) root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
- DocumentNode dinfDoc = (DocumentNode) root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
+ DocumentNode sinfDoc = (DocumentNode) root.getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME);
+ DocumentNode dinfDoc = (DocumentNode) root.getEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
InputStream sinfStream = new DocumentInputStream(sinfDoc);
SummaryInformation sinf = (SummaryInformation) PropertySetFactory.create(sinfStream);
@@ -479,8 +479,8 @@ class TestWrite {
// Check it didn't get changed
- sinfDoc = (DocumentNode) root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
- dinfDoc = (DocumentNode) root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
+ sinfDoc = (DocumentNode) root.getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME);
+ dinfDoc = (DocumentNode) root.getEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
InputStream sinfStream2 = new DocumentInputStream(sinfDoc);
sinf = (SummaryInformation) PropertySetFactory.create(sinfStream2);
@@ -503,8 +503,8 @@ class TestWrite {
DirectoryEntry root = fs.getRoot();
// Read the properties in once more
- DocumentNode sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
- DocumentNode dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
+ DocumentNode sinfDoc = (DocumentNode)root.getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME);
+ DocumentNode dinfDoc = (DocumentNode)root.getEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
InputStream sinfStream3 = new DocumentInputStream(sinfDoc);
SummaryInformation sinf = (SummaryInformation)PropertySetFactory.create(sinfStream3);
@@ -533,8 +533,8 @@ class TestWrite {
// Check that the filesystem can give us back the same bytes
- sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
- dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
+ sinfDoc = (DocumentNode)root.getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME);
+ dinfDoc = (DocumentNode)root.getEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
InputStream sinfStream4 = new DocumentInputStream(sinfDoc);
byte[] sinfData = IOUtils.toByteArray(sinfStream4);
@@ -581,13 +581,13 @@ class TestWrite {
// Read them back in again
- sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
+ sinfDoc = (DocumentNode)root.getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME);
InputStream sinfStream6 = new DocumentInputStream(sinfDoc);
sinf = (SummaryInformation)PropertySetFactory.create(sinfStream6);
sinfStream6.close();
assertEquals(131077, sinf.getOSVersion());
- dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
+ dinfDoc = (DocumentNode)root.getEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
InputStream dinfStream6 = new DocumentInputStream(dinfDoc);
dinf = (DocumentSummaryInformation)PropertySetFactory.create(dinfStream6);
dinfStream6.close();
@@ -609,13 +609,13 @@ class TestWrite {
DirectoryEntry root = fs.getRoot();
// Re-check on load
- DocumentNode sinfDoc = (DocumentNode) root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
+ DocumentNode sinfDoc = (DocumentNode) root.getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME);
InputStream sinfStream7 = new DocumentInputStream(sinfDoc);
SummaryInformation sinf = (SummaryInformation) PropertySetFactory.create(sinfStream7);
sinfStream7.close();
assertEquals(131077, sinf.getOSVersion());
- DocumentNode dinfDoc = (DocumentNode) root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
+ DocumentNode dinfDoc = (DocumentNode) root.getEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
InputStream dinfStream7 = new DocumentInputStream(dinfDoc);
DocumentSummaryInformation dinf = (DocumentSummaryInformation) PropertySetFactory.create(dinfStream7);
dinfStream7.close();
diff --git a/poi/src/test/java/org/apache/poi/hpsf/basic/TestWriteWellKnown.java b/poi/src/test/java/org/apache/poi/hpsf/basic/TestWriteWellKnown.java
index 06cf09cf3f..7a296522c7 100644
--- a/poi/src/test/java/org/apache/poi/hpsf/basic/TestWriteWellKnown.java
+++ b/poi/src/test/java/org/apache/poi/hpsf/basic/TestWriteWellKnown.java
@@ -494,7 +494,7 @@ class TestWriteWellKnown {
static DocumentSummaryInformation getDocumentSummaryInformation(POIFSFileSystem poifs)
throws IOException, NoPropertySetStreamException, UnexpectedPropertySetTypeException {
- if (!poifs.getRoot().hasEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME)) {
+ if (!poifs.getRoot().hasEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME)) {
return null;
}
diff --git a/poi/src/test/java/org/apache/poi/hssf/extractor/TestExcelExtractor.java b/poi/src/test/java/org/apache/poi/hssf/extractor/TestExcelExtractor.java
index 497bd20843..495ceb9837 100644
--- a/poi/src/test/java/org/apache/poi/hssf/extractor/TestExcelExtractor.java
+++ b/poi/src/test/java/org/apache/poi/hssf/extractor/TestExcelExtractor.java
@@ -252,9 +252,9 @@ final class TestExcelExtractor {
try {
fs = new POIFSFileSystem(POIDataSamples.getDocumentInstance().getFile("word_with_embeded.doc"));
- DirectoryNode objPool = (DirectoryNode) fs.getRoot().getEntry("ObjectPool");
- DirectoryNode dirA = (DirectoryNode) objPool.getEntry("_1269427460");
- DirectoryNode dirB = (DirectoryNode) objPool.getEntry("_1269427461");
+ DirectoryNode objPool = (DirectoryNode) fs.getRoot().getEntryCaseInsensitive("ObjectPool");
+ DirectoryNode dirA = (DirectoryNode) objPool.getEntryCaseInsensitive("_1269427460");
+ DirectoryNode dirB = (DirectoryNode) objPool.getEntryCaseInsensitive("_1269427461");
wbA = new HSSFWorkbook(dirA, fs, true);
exA = new ExcelExtractor(wbA);
@@ -287,8 +287,8 @@ final class TestExcelExtractor {
try {
fs = new POIFSFileSystem(ssSamples.getFile("excel_with_embeded.xls"));
- DirectoryNode dirA = (DirectoryNode) fs.getRoot().getEntry("MBD0000A3B5");
- DirectoryNode dirB = (DirectoryNode) fs.getRoot().getEntry("MBD0000A3B4");
+ DirectoryNode dirA = (DirectoryNode) fs.getRoot().getEntryCaseInsensitive("MBD0000A3B5");
+ DirectoryNode dirB = (DirectoryNode) fs.getRoot().getEntryCaseInsensitive("MBD0000A3B4");
wbA = new HSSFWorkbook(dirA, fs, true);
wbB = new HSSFWorkbook(dirB, fs, true);
diff --git a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestBugs.java b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestBugs.java
index b836e3269c..b9d5fcb3ca 100644
--- a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestBugs.java
+++ b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestBugs.java
@@ -2451,7 +2451,7 @@ final class TestBugs extends BaseTestBugzillaIssues {
try (POIFSFileSystem poifs = new POIFSFileSystem(HSSFTestDataSamples.openSampleFileStream("61300.xls"))) {
DocumentEntry entry =
- (DocumentEntry) poifs.getRoot().getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
+ (DocumentEntry) poifs.getRoot().getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME);
RuntimeException ex = assertThrows(
RuntimeException.class,
diff --git a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
index eb87441cd3..94f3c4fa78 100644
--- a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
+++ b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
@@ -644,7 +644,7 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook {
DirectoryEntry dir = embeddedObject.getDirectory();
if (dir instanceof DirectoryNode) {
DirectoryNode dNode = (DirectoryNode) dir;
- if (dNode.hasEntry("WordDocument")) {
+ if (dNode.hasEntryCaseInsensitive("WordDocument")) {
found = true;
break;
}
diff --git a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestNonStandardWorkbookStreamNames.java b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestNonStandardWorkbookStreamNames.java
index 3434d7b581..e44195afcd 100644
--- a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestNonStandardWorkbookStreamNames.java
+++ b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestNonStandardWorkbookStreamNames.java
@@ -121,14 +121,13 @@ final class TestNonStandardWorkbookStreamNames {
wb.close();
DirectoryNode root = wb2.getDirectory();
-
// Check that we have the new entries
assertTrue(root.hasEntry("Workbook"));
assertFalse(root.hasEntry("BOOK"));
assertFalse(root.hasEntry("WORKBOOK"));
// As we preserved, should also have a few other streams
- assertTrue(root.hasEntry(SummaryInformation.DEFAULT_STREAM_NAME));
+ assertTrue(root.hasEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME));
wb2.close();
}
}
diff --git a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java
index 2bc2da0a1c..4faf164731 100644
--- a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java
+++ b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java
@@ -89,7 +89,7 @@ class TestPOIFSProperties {
summary1.setTitle(title);
//write the modified property back to POIFS
- fs.getRoot().getEntry(SummaryInformation.DEFAULT_STREAM_NAME).delete();
+ fs.getRoot().getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME).delete();
fs.createDocument(summary1.toInputStream(), SummaryInformation.DEFAULT_STREAM_NAME);
// check that the information was added successfully to the filesystem object
diff --git a/poi/src/test/java/org/apache/poi/poifs/filesystem/ReaderWriter.java b/poi/src/test/java/org/apache/poi/poifs/filesystem/ReaderWriter.java
index 195682ae75..0c57856df0 100644
--- a/poi/src/test/java/org/apache/poi/poifs/filesystem/ReaderWriter.java
+++ b/poi/src/test/java/org/apache/poi/poifs/filesystem/ReaderWriter.java
@@ -106,7 +106,7 @@ public final class ReaderWriter implements POIFSReaderListener, POIFSWriterListe
try
{
- nextEntry = entry.getEntry(componentName);
+ nextEntry = entry.getEntryCaseInsensitive(componentName);
}
catch (FileNotFoundException ignored)
{
diff --git a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDirectoryNode.java b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDirectoryNode.java
index 1a81dc5a58..15342a245d 100644
--- a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDirectoryNode.java
+++ b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDirectoryNode.java
@@ -73,7 +73,7 @@ final class TestDirectoryNode {
assertEquals(0, node.getEntryCount());
// verify behavior of getEntry
- assertThrows(FileNotFoundException.class, () -> node.getEntry("foo"));
+ assertThrows(FileNotFoundException.class, () -> node.getEntryCaseInsensitive("foo"));
// verify behavior of isDirectoryEntry
assertTrue(node.isDirectoryEntry());
@@ -124,11 +124,11 @@ final class TestDirectoryNode {
assertEquals(2, node.getEntryCount());
// verify behavior of getEntry
- DirectoryNode child1 = (DirectoryNode) node.getEntry("child1");
+ DirectoryNode child1 = (DirectoryNode) node.getEntryCaseInsensitive("child1");
- child1.getEntry("child3");
- node.getEntry("child2");
- assertThrows(FileNotFoundException.class, () -> node.getEntry("child3"));
+ child1.getEntryCaseInsensitive("child3");
+ node.getEntryCaseInsensitive("child2");
+ assertThrows(FileNotFoundException.class, () -> node.getEntryCaseInsensitive("child3"));
// verify behavior of isDirectoryEntry
assertTrue(node.isDirectoryEntry());
diff --git a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocument.java b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocument.java
index 94bc700be3..59c6d168ba 100644
--- a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocument.java
+++ b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocument.java
@@ -101,8 +101,8 @@ class TestDocument {
POIFSFileSystem poifs = document.getFileSystem();
String name = "test" + input.length;
DirectoryNode root = poifs.getRoot();
- if (root.hasEntry(name)) {
- root.deleteEntry((EntryNode)root.getEntry(name));
+ if (root.hasEntryCaseInsensitive(name)) {
+ root.deleteEntry((EntryNode)root.getEntryCaseInsensitive(name));
}
return ((DocumentNode)root
.createDocument(name, new ByteArrayInputStream(input)))
diff --git a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocumentInputStream.java b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocumentInputStream.java
index c0d4de1353..c083a2c3e4 100644
--- a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocumentInputStream.java
+++ b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocumentInputStream.java
@@ -381,22 +381,22 @@ final class TestDocumentInputStream {
// Check inside
DirectoryNode root = poifs.getRoot();
// Top Level
- Entry top = root.getEntry("Contents");
+ Entry top = root.getEntryCaseInsensitive("Contents");
assertTrue(top.isDocumentEntry());
stream = root.createDocumentInputStream(top);
assertNotEquals(-1, stream.read());
// One Level Down
- DirectoryNode escher = (DirectoryNode) root.getEntry("Escher");
- Entry one = escher.getEntry("EscherStm");
+ DirectoryNode escher = (DirectoryNode) root.getEntryCaseInsensitive("Escher");
+ Entry one = escher.getEntryCaseInsensitive("EscherStm");
assertTrue(one.isDocumentEntry());
stream = escher.createDocumentInputStream(one);
assertNotEquals(-1, stream.read());
// Two Levels Down
- DirectoryNode quill = (DirectoryNode) root.getEntry("Quill");
- DirectoryNode quillSub = (DirectoryNode) quill.getEntry("QuillSub");
- Entry two = quillSub.getEntry("CONTENTS");
+ DirectoryNode quill = (DirectoryNode) root.getEntryCaseInsensitive("Quill");
+ DirectoryNode quillSub = (DirectoryNode) quill.getEntryCaseInsensitive("QuillSub");
+ Entry two = quillSub.getEntryCaseInsensitive("CONTENTS");
assertTrue(two.isDocumentEntry());
stream = quillSub.createDocumentInputStream(two);
assertNotEquals(-1, stream.read());
diff --git a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestEmptyDocument.java b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestEmptyDocument.java
index f60ce5bc3b..9507b13a7d 100644
--- a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestEmptyDocument.java
+++ b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestEmptyDocument.java
@@ -101,13 +101,13 @@ final class TestEmptyDocument {
// This line caused the error.
try (POIFSFileSystem fs = new POIFSFileSystem(out.toInputStream())) {
- DocumentEntry entry = (DocumentEntry) fs.getRoot().getEntry("Empty");
+ DocumentEntry entry = (DocumentEntry) fs.getRoot().getEntryCaseInsensitive("Empty");
assertEquals(0, entry.getSize(), "Expected zero size");
byte[] actualReadbackData;
actualReadbackData = IOUtils.toByteArray(new DocumentInputStream(entry));
assertEquals(0, actualReadbackData.length, "Expected zero read from stream");
- entry = (DocumentEntry) fs.getRoot().getEntry("NotEmpty");
+ entry = (DocumentEntry) fs.getRoot().getEntryCaseInsensitive("NotEmpty");
actualReadbackData = IOUtils.toByteArray(new DocumentInputStream(entry));
assertEquals(testData.length, entry.getSize(), "Expected size was wrong");
assertArrayEquals(testData, actualReadbackData, "Expected same data read from stream");
diff --git a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestEntryUtils.java b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestEntryUtils.java
index 16fa1fd240..9dfec6f276 100644
--- a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestEntryUtils.java
+++ b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestEntryUtils.java
@@ -53,18 +53,18 @@ class TestEntryUtils {
EntryUtils.copyNodeRecursively(entryR, fsD.getRoot());
assertEquals(1, fsD.getRoot().getEntryCount());
- assertNotNull(fsD.getRoot().getEntry("EntryRoot"));
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive("EntryRoot"));
EntryUtils.copyNodeRecursively(entryA1, fsD.getRoot());
assertEquals(2, fsD.getRoot().getEntryCount());
- assertNotNull(fsD.getRoot().getEntry("EntryRoot"));
- assertNotNull(fsD.getRoot().getEntry("EntryA1"));
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive("EntryRoot"));
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive("EntryA1"));
EntryUtils.copyNodeRecursively(entryA2, fsD.getRoot());
assertEquals(3, fsD.getRoot().getEntryCount());
- assertNotNull(fsD.getRoot().getEntry("EntryRoot"));
- assertNotNull(fsD.getRoot().getEntry("EntryA1"));
- assertNotNull(fsD.getRoot().getEntry("EntryA2"));
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive("EntryRoot"));
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive("EntryA1"));
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive("EntryA2"));
fsD.close();
@@ -74,15 +74,15 @@ class TestEntryUtils {
EntryUtils.copyNodeRecursively(dirB, fsD.getRoot());
assertEquals(1, fsD.getRoot().getEntryCount());
- assertNotNull(fsD.getRoot().getEntry("DirB"));
- assertEquals(0, ((DirectoryEntry)fsD.getRoot().getEntry("DirB")).getEntryCount());
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive("DirB"));
+ assertEquals(0, ((DirectoryEntry)fsD.getRoot().getEntryCaseInsensitive("DirB")).getEntryCount());
EntryUtils.copyNodeRecursively(dirA, fsD.getRoot());
assertEquals(2, fsD.getRoot().getEntryCount());
- assertNotNull(fsD.getRoot().getEntry("DirB"));
- assertEquals(0, ((DirectoryEntry)fsD.getRoot().getEntry("DirB")).getEntryCount());
- assertNotNull(fsD.getRoot().getEntry("DirA"));
- assertEquals(2, ((DirectoryEntry)fsD.getRoot().getEntry("DirA")).getEntryCount());
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive("DirB"));
+ assertEquals(0, ((DirectoryEntry)fsD.getRoot().getEntryCaseInsensitive("DirB")).getEntryCount());
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive("DirA"));
+ assertEquals(2, ((DirectoryEntry)fsD.getRoot().getEntryCaseInsensitive("DirA")).getEntryCount());
fsD.close();
// Copy the whole lot
@@ -91,11 +91,11 @@ class TestEntryUtils {
EntryUtils.copyNodes(fs, fsD, new ArrayList<>());
assertEquals(3, fsD.getRoot().getEntryCount());
- assertNotNull(fsD.getRoot().getEntry(dirA.getName()));
- assertNotNull(fsD.getRoot().getEntry(dirB.getName()));
- assertNotNull(fsD.getRoot().getEntry(entryR.getName()));
- assertEquals(0, ((DirectoryEntry)fsD.getRoot().getEntry("DirB")).getEntryCount());
- assertEquals(2, ((DirectoryEntry)fsD.getRoot().getEntry("DirA")).getEntryCount());
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive(dirA.getName()));
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive(dirB.getName()));
+ assertNotNull(fsD.getRoot().getEntryCaseInsensitive(entryR.getName()));
+ assertEquals(0, ((DirectoryEntry)fsD.getRoot().getEntryCaseInsensitive("DirB")).getEntryCount());
+ assertEquals(2, ((DirectoryEntry)fsD.getRoot().getEntryCaseInsensitive("DirA")).getEntryCount());
fsD.close();
fs.close();
}
@@ -131,11 +131,11 @@ class TestEntryUtils {
try (InputStream tmpI = tmpO.toInputStream();
POIFSFileSystem nfs = new POIFSFileSystem(tmpI)) {
- DirectoryEntry dN1 = (DirectoryEntry) nfs.getRoot().getEntry("DirA");
- DirectoryEntry dN2 = (DirectoryEntry) nfs.getRoot().getEntry("DirB");
- DocumentEntry eNA1 = (DocumentEntry) dN1.getEntry(entryA1.getName());
- DocumentEntry eNA2 = (DocumentEntry) dN1.getEntry(entryA2.getName());
- DocumentEntry eNB1 = (DocumentEntry) dN2.getEntry(entryB1.getName());
+ DirectoryEntry dN1 = (DirectoryEntry) nfs.getRoot().getEntryCaseInsensitive("DirA");
+ DirectoryEntry dN2 = (DirectoryEntry) nfs.getRoot().getEntryCaseInsensitive("DirB");
+ DocumentEntry eNA1 = (DocumentEntry) dN1.getEntryCaseInsensitive(entryA1.getName());
+ DocumentEntry eNA2 = (DocumentEntry) dN1.getEntryCaseInsensitive(entryA2.getName());
+ DocumentEntry eNB1 = (DocumentEntry) dN2.getEntryCaseInsensitive(entryB1.getName());
assertFalse(EntryUtils.areDocumentsIdentical(eNA1, eNA2));
assertTrue(EntryUtils.areDocumentsIdentical(eNA1, eNB1));
diff --git a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestFilteringDirectoryNode.java b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestFilteringDirectoryNode.java
index ae28e00d36..39bbfa2a40 100644
--- a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestFilteringDirectoryNode.java
+++ b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestFilteringDirectoryNode.java
@@ -63,16 +63,16 @@ final class TestFilteringDirectoryNode {
void testNoFiltering() throws Exception {
FilteringDirectoryNode d = new FilteringDirectoryNode(fs.getRoot(), new HashSet<>());
assertEquals(3, d.getEntryCount());
- assertEquals(dirA.getName(), d.getEntry(dirA.getName()).getName());
+ assertEquals(dirA.getName(), d.getEntryCaseInsensitive(dirA.getName()).getName());
- assertTrue(d.getEntry(dirA.getName()).isDirectoryEntry());
- assertFalse(d.getEntry(dirA.getName()).isDocumentEntry());
+ assertTrue(d.getEntryCaseInsensitive(dirA.getName()).isDirectoryEntry());
+ assertFalse(d.getEntryCaseInsensitive(dirA.getName()).isDocumentEntry());
- assertTrue(d.getEntry(dirB.getName()).isDirectoryEntry());
- assertFalse(d.getEntry(dirB.getName()).isDocumentEntry());
+ assertTrue(d.getEntryCaseInsensitive(dirB.getName()).isDirectoryEntry());
+ assertFalse(d.getEntryCaseInsensitive(dirB.getName()).isDocumentEntry());
- assertFalse(d.getEntry(eRoot.getName()).isDirectoryEntry());
- assertTrue(d.getEntry(eRoot.getName()).isDocumentEntry());
+ assertFalse(d.getEntryCaseInsensitive(eRoot.getName()).isDirectoryEntry());
+ assertTrue(d.getEntryCaseInsensitive(eRoot.getName()).isDocumentEntry());
Iterator<Entry> i = d.getEntries();
assertEquals(dirA, i.next());
@@ -93,13 +93,13 @@ final class TestFilteringDirectoryNode {
FilteringDirectoryNode d1 = new FilteringDirectoryNode(fs.getRoot(), excl);
assertEquals(2, d1.getEntryCount());
- assertTrue(d1.hasEntry(dirA.getName()));
- assertTrue(d1.hasEntry(dirB.getName()));
- assertFalse(d1.hasEntry(eRoot.getName()));
+ assertTrue(d1.hasEntryCaseInsensitive(dirA.getName()));
+ assertTrue(d1.hasEntryCaseInsensitive(dirB.getName()));
+ assertFalse(d1.hasEntryCaseInsensitive(eRoot.getName()));
- assertEquals(dirA, d1.getEntry(dirA.getName()));
- assertEquals(dirB, d1.getEntry(dirB.getName()));
- assertThrows(FileNotFoundException.class, () -> d1.getEntry(eRoot.getName()));
+ assertEquals(dirA, d1.getEntryCaseInsensitive(dirA.getName()));
+ assertEquals(dirB, d1.getEntryCaseInsensitive(dirB.getName()));
+ assertThrows(FileNotFoundException.class, () -> d1.getEntryCaseInsensitive(eRoot.getName()));
Iterator<Entry> i = d1.getEntries();
assertEquals(dirA, i.next());
@@ -117,12 +117,12 @@ final class TestFilteringDirectoryNode {
FilteringDirectoryNode d2 = new FilteringDirectoryNode(fs.getRoot(), excl);
assertEquals(1, d2.getEntryCount());
- assertFalse(d2.hasEntry(dirA.getName()));
- assertTrue(d2.hasEntry(dirB.getName()));
- assertFalse(d2.hasEntry(eRoot.getName()));
- assertThrows(FileNotFoundException.class, () -> d2.getEntry(dirA.getName()), "Should be filtered");
- assertEquals(dirB, d2.getEntry(dirB.getName()));
- assertThrows(FileNotFoundException.class, () -> d2.getEntry(eRoot.getName()), "Should be filtered");
+ assertFalse(d2.hasEntryCaseInsensitive(dirA.getName()));
+ assertTrue(d2.hasEntryCaseInsensitive(dirB.getName()));
+ assertFalse(d2.hasEntryCaseInsensitive(eRoot.getName()));
+ assertThrows(FileNotFoundException.class, () -> d2.getEntryCaseInsensitive(dirA.getName()), "Should be filtered");
+ assertEquals(dirB, d2.getEntryCaseInsensitive(dirB.getName()));
+ assertThrows(FileNotFoundException.class, () -> d2.getEntryCaseInsensitive(eRoot.getName()), "Should be filtered");
i = d2.getEntries();
assertEquals(dirB, i.next());
@@ -137,12 +137,12 @@ final class TestFilteringDirectoryNode {
FilteringDirectoryNode d3 = new FilteringDirectoryNode(fs.getRoot(), excl);
assertEquals(0, d3.getEntryCount());
- assertFalse(d3.hasEntry(dirA.getName()));
- assertFalse(d3.hasEntry(dirB.getName()));
- assertFalse(d3.hasEntry(eRoot.getName()));
- assertThrows(FileNotFoundException.class, () -> d3.getEntry(dirA.getName()), "Should be filtered");
- assertThrows(FileNotFoundException.class, () -> d3.getEntry(dirB.getName()), "Should be filtered");
- assertThrows(FileNotFoundException.class, () -> d3.getEntry(eRoot.getName()), "Should be filtered");
+ assertFalse(d3.hasEntryCaseInsensitive(dirA.getName()));
+ assertFalse(d3.hasEntryCaseInsensitive(dirB.getName()));
+ assertFalse(d3.hasEntryCaseInsensitive(eRoot.getName()));
+ assertThrows(FileNotFoundException.class, () -> d3.getEntryCaseInsensitive(dirA.getName()), "Should be filtered");
+ assertThrows(FileNotFoundException.class, () -> d3.getEntryCaseInsensitive(dirB.getName()), "Should be filtered");
+ assertThrows(FileNotFoundException.class, () -> d3.getEntryCaseInsensitive(eRoot.getName()), "Should be filtered");
i = d3.getEntries();
assertThrows(NoSuchElementException.class, i::next, "Should throw NoSuchElementException when depleted");
@@ -161,24 +161,24 @@ final class TestFilteringDirectoryNode {
// Check main
assertEquals(2, d.getEntryCount());
- assertTrue(d.hasEntry(dirA.getName()));
- assertTrue(d.hasEntry(dirB.getName()));
- assertFalse(d.hasEntry(eRoot.getName()));
+ assertTrue(d.hasEntryCaseInsensitive(dirA.getName()));
+ assertTrue(d.hasEntryCaseInsensitive(dirB.getName()));
+ assertFalse(d.hasEntryCaseInsensitive(eRoot.getName()));
// Check filtering down
- assertTrue(d.getEntry(dirA.getName()) instanceof FilteringDirectoryNode);
- assertFalse(d.getEntry(dirB.getName()) instanceof FilteringDirectoryNode);
+ assertTrue(d.getEntryCaseInsensitive(dirA.getName()) instanceof FilteringDirectoryNode);
+ assertFalse(d.getEntryCaseInsensitive(dirB.getName()) instanceof FilteringDirectoryNode);
- DirectoryEntry fdA = (DirectoryEntry) d.getEntry(dirA.getName());
- assertFalse(fdA.hasEntry(eA.getName()));
- assertTrue(fdA.hasEntry(dirAA.getName()));
+ DirectoryEntry fdA = (DirectoryEntry) d.getEntryCaseInsensitive(dirA.getName());
+ assertFalse(fdA.hasEntryCaseInsensitive(eA.getName()));
+ assertTrue(fdA.hasEntryCaseInsensitive(dirAA.getName()));
- DirectoryEntry fdAA = (DirectoryEntry) fdA.getEntry(dirAA.getName());
- assertTrue(fdAA.hasEntry(eAA.getName()));
+ DirectoryEntry fdAA = (DirectoryEntry) fdA.getEntryCaseInsensitive(dirAA.getName());
+ assertTrue(fdAA.hasEntryCaseInsensitive(eAA.getName()));
}
@Test
void testNullDirectory() {
assertThrows(IllegalArgumentException.class, () -> new FilteringDirectoryNode(null, null));
}
-} \ No newline at end of file
+}
diff --git a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSFileSystem.java b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSFileSystem.java
index 10e7759a06..a4c421a2a7 100644
--- a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSFileSystem.java
+++ b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSFileSystem.java
@@ -214,7 +214,7 @@ final class TestPOIFSFileSystem {
DirectoryNode root = fs.getRoot();
assertEquals(1, root.getEntryCount());
- DocumentNode big = (DocumentNode)root.getEntry("BIG");
+ DocumentNode big = (DocumentNode)root.getEntryCaseInsensitive("BIG");
assertEquals(hugeStream.length, big.getSize());
}
diff --git a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSMiniStore.java b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSMiniStore.java
index fcc1e4bcf1..8d24e9f87b 100644
--- a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSMiniStore.java
+++ b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSMiniStore.java
@@ -390,7 +390,7 @@ final class TestPOIFSMiniStore {
assertEquals(POIFSConstants.UNUSED_BLOCK, ministore.getNextBlock(2));
// Check the data is unchanged and the right length
- entry = (DocumentEntry) fs.getRoot().getEntry("mini");
+ entry = (DocumentEntry) fs.getRoot().getEntryCaseInsensitive("mini");
assertEquals(data.length, entry.getSize());
byte[] rdata = new byte[data.length];
dis = new DocumentInputStream(entry);
@@ -398,7 +398,7 @@ final class TestPOIFSMiniStore {
assertArrayEquals(data, rdata);
dis.close();
- entry = (DocumentEntry) fs.getRoot().getEntry("mini2");
+ entry = (DocumentEntry) fs.getRoot().getEntryCaseInsensitive("mini2");
assertEquals(data.length, entry.getSize());
rdata = new byte[data.length];
dis = new DocumentInputStream(entry);
diff --git a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSStream.java b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSStream.java
index 4efcc80983..7f25ca751d 100644
--- a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSStream.java
+++ b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSStream.java
@@ -960,7 +960,7 @@ final class TestPOIFSStream {
assertEquals(POIFSConstants.END_OF_CHAIN, bat.getValueAt(10));
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(11));
- DocumentEntry normal = (DocumentEntry) fs1.getRoot().getEntry("Normal");
+ DocumentEntry normal = (DocumentEntry) fs1.getRoot().getEntryCaseInsensitive("Normal");
assertEquals(4106, normal.getSize());
assertEquals(4106, ((DocumentNode) normal).getProperty().getSize());
@@ -988,7 +988,7 @@ final class TestPOIFSStream {
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(10));
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(11));
- normal = (DocumentEntry) fs1.getRoot().getEntry("Normal");
+ normal = (DocumentEntry) fs1.getRoot().getEntryCaseInsensitive("Normal");
assertEquals(4096, normal.getSize());
assertEquals(4096, ((DocumentNode) normal).getProperty().getSize());
@@ -1011,13 +1011,13 @@ final class TestPOIFSStream {
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(10));
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(11));
- normal = (DocumentEntry) fs2.getRoot().getEntry("Normal");
+ normal = (DocumentEntry) fs2.getRoot().getEntryCaseInsensitive("Normal");
assertEquals(4096, normal.getSize());
assertEquals(4096, ((DocumentNode) normal).getProperty().getSize());
// Make longer, take 1 block at the end
- normal = (DocumentEntry) fs2.getRoot().getEntry("Normal");
+ normal = (DocumentEntry) fs2.getRoot().getEntryCaseInsensitive("Normal");
try (DocumentOutputStream nout = new DocumentOutputStream(normal)) {
nout.write(main4106);
}
@@ -1036,14 +1036,14 @@ final class TestPOIFSStream {
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(11));
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(12));
- normal = (DocumentEntry) fs2.getRoot().getEntry("Normal");
+ normal = (DocumentEntry) fs2.getRoot().getEntryCaseInsensitive("Normal");
assertEquals(4106, normal.getSize());
assertEquals(4106, ((DocumentNode) normal).getProperty().getSize());
// Make it small, will trigger the SBAT stream and free lots up
byte[] mini = new byte[]{42, 0, 1, 2, 3, 4, 42};
- normal = (DocumentEntry) fs2.getRoot().getEntry("Normal");
+ normal = (DocumentEntry) fs2.getRoot().getEntryCaseInsensitive("Normal");
try (DocumentOutputStream nout = new DocumentOutputStream(normal)) {
nout.write(mini);
}
@@ -1062,7 +1062,7 @@ final class TestPOIFSStream {
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(11));
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(12));
- normal = (DocumentEntry) fs2.getRoot().getEntry("Normal");
+ normal = (DocumentEntry) fs2.getRoot().getEntryCaseInsensitive("Normal");
assertEquals(7, normal.getSize());
assertEquals(7, ((DocumentNode) normal).getProperty().getSize());
@@ -1088,7 +1088,7 @@ final class TestPOIFSStream {
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(12));
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(13));
- normal = (DocumentEntry) fs2.getRoot().getEntry("Normal");
+ normal = (DocumentEntry) fs2.getRoot().getEntryCaseInsensitive("Normal");
assertEquals(4096, normal.getSize());
assertEquals(4096, ((DocumentNode) normal).getProperty().getSize());
@@ -1112,7 +1112,7 @@ final class TestPOIFSStream {
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(12));
assertEquals(POIFSConstants.UNUSED_BLOCK, bat.getValueAt(13));
- normal = (DocumentEntry) fs3.getRoot().getEntry("Normal");
+ normal = (DocumentEntry) fs3.getRoot().getEntryCaseInsensitive("Normal");
assertEquals(4096, normal.getSize());
assertEquals(4096, ((DocumentNode) normal).getProperty().getSize());
}
@@ -1639,11 +1639,11 @@ final class TestPOIFSStream {
assertEquals(5, root.getEntryCount());
// Check by the names
- Entry thumbnail = root.getEntry("Thumbnail");
- Entry dsi = root.getEntry("\u0005DocumentSummaryInformation");
- Entry si = root.getEntry("\u0005SummaryInformation");
- Entry image = root.getEntry("Image");
- Entry tags = root.getEntry("Tags");
+ Entry thumbnail = root.getEntryCaseInsensitive("Thumbnail");
+ Entry dsi = root.getEntryCaseInsensitive("\u0005DocumentSummaryInformation");
+ Entry si = root.getEntryCaseInsensitive("\u0005SummaryInformation");
+ Entry image = root.getEntryCaseInsensitive("Image");
+ Entry tags = root.getEntryCaseInsensitive("Tags");
assertFalse(thumbnail.isDirectoryEntry());
assertFalse(dsi.isDirectoryEntry());
@@ -1675,7 +1675,7 @@ final class TestPOIFSStream {
throws IOException, NoPropertySetStreamException {
try (POIFSFileSystem fs = opener.apply(file)) {
DirectoryEntry root = fs.getRoot();
- Entry si = root.getEntry("\u0005SummaryInformation");
+ Entry si = root.getEntryCaseInsensitive("\u0005SummaryInformation");
assertTrue(si.isDocumentEntry());
DocumentNode doc = (DocumentNode) si;
@@ -1697,7 +1697,7 @@ final class TestPOIFSStream {
// Try the other summary information
- si = root.getEntry("\u0005DocumentSummaryInformation");
+ si = root.getEntryCaseInsensitive("\u0005DocumentSummaryInformation");
assertTrue(si.isDocumentEntry());
doc = (DocumentNode) si;
assertContentsMatches(null, doc);
@@ -1745,11 +1745,11 @@ final class TestPOIFSStream {
// Check the contents of them - parse the summary block and check
sinf = (SummaryInformation) PropertySetFactory.create(new DocumentInputStream(
- (DocumentEntry) root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME)));
+ (DocumentEntry) root.getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME)));
assertEquals(131333, sinf.getOSVersion());
dinf = (DocumentSummaryInformation) PropertySetFactory.create(new DocumentInputStream(
- (DocumentEntry) root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME)));
+ (DocumentEntry) root.getEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME)));
assertEquals(131333, dinf.getOSVersion());
@@ -1765,7 +1765,7 @@ final class TestPOIFSStream {
try (POIFSFileSystem fs3 = writeOutAndReadBack(fs2)) {
root = fs3.getRoot();
- testDir = (DirectoryEntry) root.getEntry("Testing 123");
+ testDir = (DirectoryEntry) root.getEntryCaseInsensitive("Testing 123");
assertEquals(6, root.getEntryCount());
assertThat(root.getEntryNames(), hasItem("Thumbnail"));
assertThat(root.getEntryNames(), hasItem("Image"));
@@ -1777,21 +1777,21 @@ final class TestPOIFSStream {
// Check old and new are there
sinf = (SummaryInformation) PropertySetFactory.create(new DocumentInputStream(
- (DocumentEntry) root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME)));
+ (DocumentEntry) root.getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME)));
assertEquals(131333, sinf.getOSVersion());
dinf = (DocumentSummaryInformation) PropertySetFactory.create(new DocumentInputStream(
- (DocumentEntry) root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME)));
+ (DocumentEntry) root.getEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME)));
assertEquals(131333, dinf.getOSVersion());
- assertContentsMatches(mini, (DocumentEntry) testDir.getEntry("Mini"));
+ assertContentsMatches(mini, (DocumentEntry) testDir.getEntryCaseInsensitive("Mini"));
// Write out and read once more, just to be sure
try (POIFSFileSystem fs4 = writeOutAndReadBack(fs3)) {
root = fs4.getRoot();
- testDir = (DirectoryEntry) root.getEntry("Testing 123");
+ testDir = (DirectoryEntry) root.getEntryCaseInsensitive("Testing 123");
assertEquals(6, root.getEntryCount());
assertThat(root.getEntryNames(), hasItem("Thumbnail"));
assertThat(root.getEntryNames(), hasItem("Image"));
@@ -1801,14 +1801,14 @@ final class TestPOIFSStream {
assertThat(root.getEntryNames(), hasItem("\u0005SummaryInformation"));
sinf = (SummaryInformation) PropertySetFactory.create(new DocumentInputStream(
- (DocumentEntry) root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME)));
+ (DocumentEntry) root.getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME)));
assertEquals(131333, sinf.getOSVersion());
dinf = (DocumentSummaryInformation) PropertySetFactory.create(new DocumentInputStream(
- (DocumentEntry) root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME)));
+ (DocumentEntry) root.getEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME)));
assertEquals(131333, dinf.getOSVersion());
- assertContentsMatches(mini, (DocumentEntry) testDir.getEntry("Mini"));
+ assertContentsMatches(mini, (DocumentEntry) testDir.getEntryCaseInsensitive("Mini"));
// Add a full stream, delete a full stream
@@ -1817,7 +1817,7 @@ final class TestPOIFSStream {
main4096[4095] = -11;
testDir.createDocument("Normal4096", new ByteArrayInputStream(main4096));
- root.getEntry("Tags").delete();
+ root.getEntryCaseInsensitive("Tags").delete();
// Write out, re-load
@@ -1825,7 +1825,7 @@ final class TestPOIFSStream {
// Check it's all there
root = fs5.getRoot();
- testDir = (DirectoryEntry) root.getEntry("Testing 123");
+ testDir = (DirectoryEntry) root.getEntryCaseInsensitive("Testing 123");
assertEquals(5, root.getEntryCount());
assertThat(root.getEntryNames(), hasItem("Thumbnail"));
assertThat(root.getEntryNames(), hasItem("Image"));
@@ -1836,19 +1836,19 @@ final class TestPOIFSStream {
// Check old and new are there
sinf = (SummaryInformation) PropertySetFactory.create(new DocumentInputStream(
- (DocumentEntry) root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME)));
+ (DocumentEntry) root.getEntryCaseInsensitive(SummaryInformation.DEFAULT_STREAM_NAME)));
assertEquals(131333, sinf.getOSVersion());
dinf = (DocumentSummaryInformation) PropertySetFactory.create(new DocumentInputStream(
- (DocumentEntry) root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME)));
+ (DocumentEntry) root.getEntryCaseInsensitive(DocumentSummaryInformation.DEFAULT_STREAM_NAME)));
assertEquals(131333, dinf.getOSVersion());
- assertContentsMatches(mini, (DocumentEntry) testDir.getEntry("Mini"));
- assertContentsMatches(main4096, (DocumentEntry) testDir.getEntry("Normal4096"));
+ assertContentsMatches(mini, (DocumentEntry) testDir.getEntryCaseInsensitive("Mini"));
+ assertContentsMatches(main4096, (DocumentEntry) testDir.getEntryCaseInsensitive("Normal4096"));
// Delete a directory, and add one more
- testDir.getEntry("Testing 456").delete();
+ testDir.getEntryCaseInsensitive("Testing 456").delete();
testDir.createDirectory("Testing ABC");
@@ -1857,7 +1857,7 @@ final class TestPOIFSStream {
// Check
root = fs6.getRoot();
- testDir = (DirectoryEntry) root.getEntry("Testing 123");
+ testDir = (DirectoryEntry) root.getEntryCaseInsensitive("Testing 123");
assertEquals(5, root.getEntryCount());
assertThat(root.getEntryNames(), hasItem("Thumbnail"));
@@ -1881,7 +1881,7 @@ final class TestPOIFSStream {
try (POIFSFileSystem fs7 = writeOutAndReadBack(fs6)) {
root = fs7.getRoot();
- testDir = (DirectoryEntry) root.getEntry("Testing 123");
+ testDir = (DirectoryEntry) root.getEntryCaseInsensitive("Testing 123");
assertEquals(5, root.getEntryCount());
assertThat(root.getEntryNames(), hasItem("Thumbnail"));
@@ -1897,13 +1897,13 @@ final class TestPOIFSStream {
assertThat(testDir.getEntryNames(), hasItem("Testing 789"));
assertThat(testDir.getEntryNames(), hasItem("Testing ABC"));
- assertContentsMatches(mini, (DocumentEntry) testDir.getEntry("Mini"));
- assertContentsMatches(mini2, (DocumentEntry) testDir.getEntry("Mini2"));
- assertContentsMatches(main4096, (DocumentEntry) testDir.getEntry("Normal4096"));
+ assertContentsMatches(mini, (DocumentEntry) testDir.getEntryCaseInsensitive("Mini"));
+ assertContentsMatches(mini2, (DocumentEntry) testDir.getEntryCaseInsensitive("Mini2"));
+ assertContentsMatches(main4096, (DocumentEntry) testDir.getEntryCaseInsensitive("Normal4096"));
// Delete a mini stream, add one more
- testDir.getEntry("Mini").delete();
+ testDir.getEntryCaseInsensitive("Mini").delete();
byte[] mini3 = new byte[]{42, 0, 42, 0, 42, 0, 42};
testDir.createDocument("Mini3", new ByteArrayInputStream(mini3));
@@ -1913,7 +1913,7 @@ final class TestPOIFSStream {
try (POIFSFileSystem fs8 = writeOutAndReadBack(fs7)) {
root = fs8.getRoot();
- testDir = (DirectoryEntry) root.getEntry("Testing 123");
+ testDir = (DirectoryEntry) root.getEntryCaseInsensitive("Testing 123");
assertEquals(5, root.getEntryCount());
assertThat(root.getEntryNames(), hasItem("Thumbnail"));
@@ -1929,19 +1929,19 @@ final class TestPOIFSStream {
assertThat(testDir.getEntryNames(), hasItem("Testing 789"));
assertThat(testDir.getEntryNames(), hasItem("Testing ABC"));
- assertContentsMatches(mini2, (DocumentEntry) testDir.getEntry("Mini2"));
- assertContentsMatches(mini3, (DocumentEntry) testDir.getEntry("Mini3"));
- assertContentsMatches(main4096, (DocumentEntry) testDir.getEntry("Normal4096"));
+ assertContentsMatches(mini2, (DocumentEntry) testDir.getEntryCaseInsensitive("Mini2"));
+ assertContentsMatches(mini3, (DocumentEntry) testDir.getEntryCaseInsensitive("Mini3"));
+ assertContentsMatches(main4096, (DocumentEntry) testDir.getEntryCaseInsensitive("Normal4096"));
// Change some existing streams
- POIFSDocument mini2Doc = new POIFSDocument((DocumentNode) testDir.getEntry("Mini2"));
+ POIFSDocument mini2Doc = new POIFSDocument((DocumentNode) testDir.getEntryCaseInsensitive("Mini2"));
mini2Doc.replaceContents(new ByteArrayInputStream(mini));
byte[] main4106 = new byte[4106];
main4106[0] = 41;
main4106[4105] = 42;
- POIFSDocument mainDoc = new POIFSDocument((DocumentNode) testDir.getEntry("Normal4096"));
+ POIFSDocument mainDoc = new POIFSDocument((DocumentNode) testDir.getEntryCaseInsensitive("Normal4096"));
mainDoc.replaceContents(new ByteArrayInputStream(main4106));
@@ -1949,7 +1949,7 @@ final class TestPOIFSStream {
try (POIFSFileSystem fs9 = writeOutAndReadBack(fs8)) {
root = fs9.getRoot();
- testDir = (DirectoryEntry) root.getEntry("Testing 123");
+ testDir = (DirectoryEntry) root.getEntryCaseInsensitive("Testing 123");
assertEquals(5, root.getEntryCount());
assertThat(root.getEntryNames(), hasItem("Thumbnail"));
@@ -1965,9 +1965,9 @@ final class TestPOIFSStream {
assertThat(testDir.getEntryNames(), hasItem("Testing 789"));
assertThat(testDir.getEntryNames(), hasItem("Testing ABC"));
- assertContentsMatches(mini, (DocumentEntry) testDir.getEntry("Mini2"));
- assertContentsMatches(mini3, (DocumentEntry) testDir.getEntry("Mini3"));
- assertContentsMatches(main4106, (DocumentEntry) testDir.getEntry("Normal4096"));
+ assertContentsMatches(mini, (DocumentEntry) testDir.getEntryCaseInsensitive("Mini2"));
+ assertContentsMatches(mini3, (DocumentEntry) testDir.getEntryCaseInsensitive("Mini3"));
+ assertContentsMatches(main4106, (DocumentEntry) testDir.getEntryCaseInsensitive("Normal4096"));
}
}
}
@@ -2165,16 +2165,16 @@ final class TestPOIFSStream {
// Check some data
assertEquals(1, fs5.getRoot().getEntryCount());
- testDir = (DirectoryEntry) fs5.getRoot().getEntry("Test Directory");
+ testDir = (DirectoryEntry) fs5.getRoot().getEntryCaseInsensitive("Test Directory");
assertEquals(3, testDir.getEntryCount());
- DocumentEntry miniDoc = (DocumentEntry) testDir.getEntry("Mini");
+ DocumentEntry miniDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Mini");
assertContentsMatches(mini, miniDoc);
- DocumentEntry normDoc = (DocumentEntry) testDir.getEntry("Normal4096");
+ DocumentEntry normDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Normal4096");
assertContentsMatches(main4096, normDoc);
- normDoc = (DocumentEntry) testDir.getEntry("Normal5124");
+ normDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Normal5124");
assertContentsMatches(main5124, normDoc);
@@ -2278,10 +2278,10 @@ final class TestPOIFSStream {
// Check that we can read the right data pre-write
- DocumentEntry miniDoc = (DocumentEntry) testDir.getEntry("Mini");
+ DocumentEntry miniDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Mini");
assertContentsMatches(mini, miniDoc);
- DocumentEntry normDoc = (DocumentEntry) testDir.getEntry("Normal4096");
+ DocumentEntry normDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Normal4096");
assertContentsMatches(main4096, normDoc);
@@ -2319,16 +2319,16 @@ final class TestPOIFSStream {
DirectoryEntry fsRoot = fs2.getRoot();
assertEquals(1, fsRoot.getEntryCount());
- parentDir = (DirectoryEntry) fsRoot.getEntry("Parent Directory");
+ parentDir = (DirectoryEntry) fsRoot.getEntryCaseInsensitive("Parent Directory");
assertEquals(1, parentDir.getEntryCount());
- testDir = (DirectoryEntry) parentDir.getEntry("Test Directory");
+ testDir = (DirectoryEntry) parentDir.getEntryCaseInsensitive("Test Directory");
assertEquals(2, testDir.getEntryCount());
- miniDoc = (DocumentEntry) testDir.getEntry("Mini");
+ miniDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Mini");
assertContentsMatches(mini, miniDoc);
- normDoc = (DocumentEntry) testDir.getEntry("Normal4096");
+ normDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Normal4096");
assertContentsMatches(main4096, normDoc);
@@ -2347,19 +2347,19 @@ final class TestPOIFSStream {
fsRoot = fs3.getRoot();
assertEquals(1, fsRoot.getEntryCount());
- parentDir = (DirectoryEntry) fsRoot.getEntry("Parent Directory");
+ parentDir = (DirectoryEntry) fsRoot.getEntryCaseInsensitive("Parent Directory");
assertEquals(1, parentDir.getEntryCount());
- testDir = (DirectoryEntry) parentDir.getEntry("Test Directory");
+ testDir = (DirectoryEntry) parentDir.getEntryCaseInsensitive("Test Directory");
assertEquals(4, testDir.getEntryCount());
- miniDoc = (DocumentEntry) testDir.getEntry("Mini");
+ miniDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Mini");
assertContentsMatches(mini, miniDoc);
- miniDoc = (DocumentEntry) testDir.getEntry("Mini2");
+ miniDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Mini2");
assertContentsMatches(mini2, miniDoc);
- normDoc = (DocumentEntry) testDir.getEntry("Normal4106");
+ normDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Normal4106");
assertContentsMatches(main4106, normDoc);
}
}
@@ -2372,15 +2372,15 @@ final class TestPOIFSStream {
DirectoryNode testDir = fs.getRoot();
assertEquals(3, testDir.getEntryCount());
- DocumentEntry entry = (DocumentEntry) testDir.getEntry("test-zero-1");
+ DocumentEntry entry = (DocumentEntry) testDir.getEntryCaseInsensitive("test-zero-1");
assertNotNull(entry);
assertEquals(0, entry.getSize());
- entry = (DocumentEntry) testDir.getEntry("test-zero-2");
+ entry = (DocumentEntry) testDir.getEntryCaseInsensitive("test-zero-2");
assertNotNull(entry);
assertEquals(0, entry.getSize());
- entry = (DocumentEntry) testDir.getEntry("test-zero-3");
+ entry = (DocumentEntry) testDir.getEntryCaseInsensitive("test-zero-3");
assertNotNull(entry);
assertEquals(0, entry.getSize());
@@ -2419,19 +2419,19 @@ final class TestPOIFSStream {
testDir.createDocument("empty-3", new ByteArrayInputStream(empty));
// Check
- miniDoc = (DocumentEntry) testDir.getEntry("Mini2");
+ miniDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Mini2");
assertContentsMatches(mini2, miniDoc);
- normDoc = (DocumentEntry) testDir.getEntry("Normal4106");
+ normDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Normal4106");
assertContentsMatches(main4106, normDoc);
- emptyDoc = (DocumentEntry) testDir.getEntry("empty-1");
+ emptyDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("empty-1");
assertContentsMatches(empty, emptyDoc);
- emptyDoc = (DocumentEntry) testDir.getEntry("empty-2");
+ emptyDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("empty-2");
assertContentsMatches(empty, emptyDoc);
- emptyDoc = (DocumentEntry) testDir.getEntry("empty-3");
+ emptyDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("empty-3");
assertContentsMatches(empty, emptyDoc);
// Look at the properties entry, and check the empty ones
@@ -2469,19 +2469,19 @@ final class TestPOIFSStream {
try (POIFSFileSystem fs2 = writeOutAndReadBack(fs1)) {
testDir = fs2.getRoot();
- miniDoc = (DocumentEntry) testDir.getEntry("Mini2");
+ miniDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Mini2");
assertContentsMatches(mini2, miniDoc);
- normDoc = (DocumentEntry) testDir.getEntry("Normal4106");
+ normDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("Normal4106");
assertContentsMatches(main4106, normDoc);
- emptyDoc = (DocumentEntry) testDir.getEntry("empty-1");
+ emptyDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("empty-1");
assertContentsMatches(empty, emptyDoc);
- emptyDoc = (DocumentEntry) testDir.getEntry("empty-2");
+ emptyDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("empty-2");
assertContentsMatches(empty, emptyDoc);
- emptyDoc = (DocumentEntry) testDir.getEntry("empty-3");
+ emptyDoc = (DocumentEntry) testDir.getEntryCaseInsensitive("empty-3");
assertContentsMatches(empty, emptyDoc);
// Check that a mini-stream was assigned, with one block used
@@ -2528,7 +2528,7 @@ final class TestPOIFSStream {
assertEquals(5, src.getRoot().getEntryCount());
// Grab the VBA project root
- DirectoryEntry vbaProj = (DirectoryEntry) src.getRoot().getEntry("_VBA_PROJECT_CUR");
+ DirectoryEntry vbaProj = (DirectoryEntry) src.getRoot().getEntryCaseInsensitive("_VBA_PROJECT_CUR");
assertEquals(3, vbaProj.getEntryCount());
// Can't delete yet, has stuff
assertFalse(vbaProj.delete());
@@ -2550,7 +2550,7 @@ final class TestPOIFSStream {
DirectoryEntry dir = (DirectoryEntry) entry;
String[] names = dir.getEntryNames().toArray(new String[dir.getEntryCount()]);
for (String name : names) {
- Entry ce = dir.getEntry(name);
+ Entry ce = dir.getEntryCaseInsensitive(name);
_recursiveDeletee(ce);
}
assertTrue(dir.delete());
@@ -2602,7 +2602,7 @@ final class TestPOIFSStream {
// Extend it past the 2gb mark
try (POIFSFileSystem fs = new POIFSFileSystem(big, false)) {
for (int i = 0; i < 19; i++) {
- entry = (DocumentEntry) fs.getRoot().getEntry("Entry" + i);
+ entry = (DocumentEntry) fs.getRoot().getEntryCaseInsensitive("Entry" + i);
assertNotNull(entry);
assertEquals(s100mb, entry.getSize());
}
@@ -2614,11 +2614,11 @@ final class TestPOIFSStream {
// Check it still works
try (POIFSFileSystem fs = new POIFSFileSystem(big, false)) {
for (int i = 0; i < 19; i++) {
- entry = (DocumentEntry) fs.getRoot().getEntry("Entry" + i);
+ entry = (DocumentEntry) fs.getRoot().getEntryCaseInsensitive("Entry" + i);
assertNotNull(entry);
assertEquals(s100mb, entry.getSize());
}
- entry = (DocumentEntry) fs.getRoot().getEntry("Bigger");
+ entry = (DocumentEntry) fs.getRoot().getEntryCaseInsensitive("Bigger");
assertNotNull(entry);
assertEquals(s512mb, entry.getSize());
}
@@ -2637,7 +2637,7 @@ final class TestPOIFSStream {
// Read it
try (POIFSFileSystem fs = new POIFSFileSystem(big, false)) {
for (int i = 0; i < 4; i++) {
- entry = (DocumentEntry) fs.getRoot().getEntry("Entry" + i);
+ entry = (DocumentEntry) fs.getRoot().getEntryCaseInsensitive("Entry" + i);
assertNotNull(entry);
assertEquals(s512mb, entry.getSize());
}
@@ -2650,7 +2650,7 @@ final class TestPOIFSStream {
// Check it worked
try (POIFSFileSystem fs = new POIFSFileSystem(big, false)) {
for (int i = 0; i < 5; i++) {
- entry = (DocumentEntry) fs.getRoot().getEntry("Entry" + i);
+ entry = (DocumentEntry) fs.getRoot().getEntryCaseInsensitive("Entry" + i);
assertNotNull(entry);
assertEquals(s512mb, entry.getSize());
}
diff --git a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPropertySorter.java b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPropertySorter.java
index 7c674b5b69..4b12050ba2 100644
--- a/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPropertySorter.java
+++ b/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPropertySorter.java
@@ -116,9 +116,9 @@ final class TestPropertySorter {
String VBA = "VBA";
DirectoryEntry root = fs.getRoot();
- DirectoryEntry vba_project = (DirectoryEntry)root.getEntry(_VBA_PROJECT_CUR);
+ DirectoryEntry vba_project = (DirectoryEntry)root.getEntryCaseInsensitive(_VBA_PROJECT_CUR);
- DirectoryNode vba = (DirectoryNode)vba_project.getEntry(VBA);
+ DirectoryNode vba = (DirectoryNode)vba_project.getEntryCaseInsensitive(VBA);
DirectoryProperty p = (DirectoryProperty)vba.getProperty();
List<Property> lst = new ArrayList<>();