Author: tallison
Date: Wed Sep 20 20:32:59 2023
New Revision: 1912438
URL: http://svn.apache.org/viewvc?rev=1912438&view=rev
Log:
Bug47950 -- make stream/directory name lookup in OLE2 case insensitive
Added:
poi/trunk/test-data/document/47950_lower.doc
poi/trunk/test-data/document/47950_normal.doc
poi/trunk/test-data/document/47950_upper.doc
Modified:
poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/hpsf/CopyCompare.java
poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/hpsf/WriteAuthorAndTitle.java
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/HPSFFileHandler.java
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/POIXMLDocumentHandler.java
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/ooxml/extractor/POIXMLExtractorFactory.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/tests/TestEncryptor.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/HPBFPart.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/PPTXMLDump.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/CurrentUserAtom.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShow.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/HWPFDocument.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/HWPFDocumentCore.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/converter/WordToTextConverter.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/ObjectPoolImpl.java
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/TestReWrite.java
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/extractor/TestExtractor.java
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/model/TestTextRunReWrite.java
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestCurrentUserAtom.java
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestExOleObjStg.java
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hwpf/HWPFDocFixture.java
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hwpf/extractor/TestWordExtractor.java
poi/trunk/poi/src/main/java/org/apache/poi/POIDocument.java
poi/trunk/poi/src/main/java/org/apache/poi/extractor/ExtractorFactory.java
poi/trunk/poi/src/main/java/org/apache/poi/extractor/MainExtractorFactory.java
poi/trunk/poi/src/main/java/org/apache/poi/hpsf/PropertySet.java
poi/trunk/poi/src/main/java/org/apache/poi/hssf/eventusermodel/HSSFEventFactory.java
poi/trunk/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java
poi/trunk/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java
poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java
poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java
poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/DataSpaceMapUtils.java
poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryNode.java
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/FilteringDirectoryNode.java
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/Ole10Native.java
poi/trunk/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java
poi/trunk/poi/src/main/java/org/apache/poi/sl/usermodel/ObjectShape.java
poi/trunk/poi/src/main/java/org/apache/poi/sl/usermodel/SlideShowFactory.java
poi/trunk/poi/src/main/java/org/apache/poi/ss/extractor/EmbeddedExtractor.java
poi/trunk/poi/src/main/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
poi/trunk/poi/src/test/java/org/apache/poi/hpsf/basic/TestReadAllFiles.java
poi/trunk/poi/src/test/java/org/apache/poi/hpsf/basic/TestWrite.java
poi/trunk/poi/src/test/java/org/apache/poi/hpsf/basic/TestWriteWellKnown.java
poi/trunk/poi/src/test/java/org/apache/poi/hssf/extractor/TestExcelExtractor.java
poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestBugs.java
poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestNonStandardWorkbookStreamNames.java
poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/ReaderWriter.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDirectoryNode.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocument.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestDocumentInputStream.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestEmptyDocument.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestEntryUtils.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestFilteringDirectoryNode.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSFileSystem.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSMiniStore.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSStream.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPropertySorter.java
Modified:
poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/hpsf/CopyCompare.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/hpsf/CopyCompare.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/hpsf/CopyCompare.java
(original)
+++
poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/hpsf/CopyCompare.java
Wed Sep 20 20:32:59 2023
@@ -174,8 +174,8 @@ public final class CopyCompare {
for (int i=0; i<path.length(); i++) {
String subDir = path.getComponent(i);
- if (de.hasEntry(subDir)) {
- de = (DirectoryEntry)de.getEntry(subDir);
+ if (de.hasEntryCaseInsensitive(subDir)) {
+ de =
(DirectoryEntry)de.getEntryCaseInsensitive(subDir);
} else {
de = de.createDirectory(subDir);
if (i == path.length()-1) {
Modified:
poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/hpsf/WriteAuthorAndTitle.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/hpsf/WriteAuthorAndTitle.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/hpsf/WriteAuthorAndTitle.java
(original)
+++
poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/hpsf/WriteAuthorAndTitle.java
Wed Sep 20 20:32:59 2023
@@ -158,7 +158,7 @@ public final class WriteAuthorAndTitle {
for (int i=0; i<path.length(); i++) {
String subDir = path.getComponent(i);
- de = (de.hasEntry(subDir)) ?
(DirectoryEntry)de.getEntry(subDir) : de.createDirectory(subDir);
+ de = (de.hasEntryCaseInsensitive(subDir)) ?
(DirectoryEntry)de.getEntryCaseInsensitive(subDir) : de.createDirectory(subDir);
}
de.createDocument(event.getName(), is);
Modified:
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/HPSFFileHandler.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/HPSFFileHandler.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/HPSFFileHandler.java
(original)
+++
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/HPSFFileHandler.java
Wed Sep 20 20:32:59 2023
@@ -101,7 +101,7 @@ public class HPSFFileHandler extends POI
private static boolean hasPropertyStream(POIFSFileSystem poifs, String
streamName) throws IOException {
DirectoryNode root = poifs.getRoot();
- if (!root.hasEntry(streamName)) {
+ if (!root.hasEntryCaseInsensitive(streamName)) {
return false;
}
try (DocumentInputStream dis =
root.createDocumentInputStream(streamName)) {
Modified:
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/POIXMLDocumentHandler.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/POIXMLDocumentHandler.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/POIXMLDocumentHandler.java
(original)
+++
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/POIXMLDocumentHandler.java
Wed Sep 20 20:32:59 2023
@@ -40,7 +40,7 @@ public final class POIXMLDocumentHandler
protected static boolean isEncrypted(InputStream stream) throws
IOException {
if (FileMagic.valueOf(stream) == FileMagic.OLE2) {
try (POIFSFileSystem poifs = new POIFSFileSystem(stream)) {
- if (poifs.getRoot().hasEntry(Decryptor.DEFAULT_POIFS_ENTRY)) {
+ if
(poifs.getRoot().hasEntryCaseInsensitive(Decryptor.DEFAULT_POIFS_ENTRY)) {
return true;
}
}
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/ooxml/extractor/POIXMLExtractorFactory.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/ooxml/extractor/POIXMLExtractorFactory.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/ooxml/extractor/POIXMLExtractorFactory.java
(original)
+++
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/ooxml/extractor/POIXMLExtractorFactory.java
Wed Sep 20 20:32:59 2023
@@ -282,13 +282,13 @@ public final class POIXMLExtractorFactor
@Override
public POITextExtractor create(DirectoryNode poifsDir, String password)
throws IOException {
// First, check for plain OOXML package
- if (poifsDir.hasEntry(OOXML_PACKAGE)) {
+ if (poifsDir.hasEntryCaseInsensitive(OOXML_PACKAGE)) {
try (InputStream is =
poifsDir.createDocumentInputStream(OOXML_PACKAGE)) {
return create(is, password);
}
}
- if (poifsDir.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY)) {
+ if (poifsDir.hasEntryCaseInsensitive(Decryptor.DEFAULT_POIFS_ENTRY)) {
EncryptionInfo ei = new EncryptionInfo(poifsDir);
Decryptor dec = ei.getDecryptor();
try {
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/tests/TestEncryptor.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/tests/TestEncryptor.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/tests/TestEncryptor.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/tests/TestEncryptor.java
Wed Sep 20 20:32:59 2023
@@ -171,7 +171,7 @@ class TestEncryptor {
assertEquals(decPackLenExpected, payloadExpected.length);
final DirectoryNode root = nfs.getRoot();
- final DocumentEntry entry =
(DocumentEntry)root.getEntry(Decryptor.DEFAULT_POIFS_ENTRY);
+ final DocumentEntry entry =
(DocumentEntry)root.getEntryCaseInsensitive(Decryptor.DEFAULT_POIFS_ENTRY);
try (InputStream is = root.createDocumentInputStream(entry)) {
// ignore padding block
encPackExpected = IOUtils.toByteArray(is, entry.getSize()-16);
@@ -225,7 +225,7 @@ class TestEncryptor {
decPackLenActual = decActual.getLength();
final DirectoryNode root = nfs.getRoot();
- final DocumentEntry entry =
(DocumentEntry)root.getEntry(Decryptor.DEFAULT_POIFS_ENTRY);
+ final DocumentEntry entry =
(DocumentEntry)root.getEntryCaseInsensitive(Decryptor.DEFAULT_POIFS_ENTRY);
try (InputStream is = root.createDocumentInputStream(entry)) {
// ignore padding block
encPackActual = IOUtils.toByteArray(is, entry.getSize()-16);
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFBugs.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
Wed Sep 20 20:32:59 2023
@@ -3460,13 +3460,13 @@ public final class TestXSSFBugs extends
// Will be OOXML wrapped in OLE2, not directly SpreadSheet
POIFSFileSystem fs = new POIFSFileSystem(data.getInputStream());
- assertTrue(fs.getRoot().hasEntry(OOXML_PACKAGE));
- assertFalse(fs.getRoot().hasEntry("Workbook"));
+ assertTrue(fs.getRoot().hasEntryCaseInsensitive(OOXML_PACKAGE));
+ assertFalse(fs.getRoot().hasEntryCaseInsensitive("Workbook"));
// Can fetch Package to get OOXML
DirectoryNode root = fs.getRoot();
- DocumentEntry docEntry = (DocumentEntry)
root.getEntry(OOXML_PACKAGE);
+ DocumentEntry docEntry = (DocumentEntry)
root.getEntryCaseInsensitive(OOXML_PACKAGE);
try (DocumentInputStream dis = new DocumentInputStream(docEntry);
OPCPackage pkg = OPCPackage.open(dis);
XSSFWorkbook wb = new XSSFWorkbook(pkg)) {
@@ -3921,4 +3921,4 @@ public final class TestXSSFBugs extends
}
}
}
-}
\ No newline at end of file
+}
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java
Wed Sep 20 20:32:59 2023
@@ -108,7 +108,7 @@ public class OLE2ScratchpadExtractorFact
final String oldPW = Biff8EncryptionKey.getCurrentUserPassword();
try {
Biff8EncryptionKey.setCurrentUserPassword(password);
- if (poifsDir.hasEntry("WordDocument")) {
+ if (poifsDir.hasEntryCaseInsensitive("WordDocument")) {
// Old or new style word document?
try {
return new WordExtractor(poifsDir);
@@ -117,20 +117,20 @@ public class OLE2ScratchpadExtractorFact
}
}
- if (poifsDir.hasEntry(HSLFSlideShow.POWERPOINT_DOCUMENT) ||
poifsDir.hasEntry(HSLFSlideShow.PP97_DOCUMENT)) {
+ if
(poifsDir.hasEntryCaseInsensitive(HSLFSlideShow.POWERPOINT_DOCUMENT) ||
poifsDir.hasEntryCaseInsensitive(HSLFSlideShow.PP97_DOCUMENT)) {
return new
SlideShowExtractor<>((HSLFSlideShow)SlideShowFactory.create(poifsDir));
}
- if (poifsDir.hasEntry("VisioDocument")) {
+ if (poifsDir.hasEntryCaseInsensitive("VisioDocument")) {
return new VisioTextExtractor(poifsDir);
}
- if (poifsDir.hasEntry("Quill")) {
+ if (poifsDir.hasEntryCaseInsensitive("Quill")) {
return new PublisherTextExtractor(poifsDir);
}
for (String entryName : OUTLOOK_ENTRY_NAMES) {
- if (poifsDir.hasEntry(entryName)) {
+ if (poifsDir.hasEntryCaseInsensitive(entryName)) {
return new OutlookTextExtractor(poifsDir);
}
}
@@ -168,7 +168,7 @@ public class OLE2ScratchpadExtractorFact
} else if (ext instanceof WordExtractor) {
// These are in ObjectPool -> _... under the root
try {
- DirectoryEntry op = (DirectoryEntry)
root.getEntry("ObjectPool");
+ DirectoryEntry op = (DirectoryEntry)
root.getEntryCaseInsensitive("ObjectPool");
StreamSupport.stream(op.spliterator(), false)
.filter(entry -> entry.getName().startsWith("_"))
.forEach(dirs::add);
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java
Wed Sep 20 20:32:59 2023
@@ -103,7 +103,7 @@ public final class HPBFDumper {
*/
public void dumpEscher() throws IOException {
DirectoryNode escherDir = (DirectoryNode)
- fs.getRoot().getEntry("Escher");
+ fs.getRoot().getEntryCaseInsensitive("Escher");
dumpEscherStm(escherDir);
dumpEscherDelayStm(escherDir);
@@ -343,9 +343,9 @@ public final class HPBFDumper {
public void dumpQuill() throws IOException {
DirectoryNode quillDir = (DirectoryNode)
- fs.getRoot().getEntry("Quill");
+ fs.getRoot().getEntryCaseInsensitive("Quill");
DirectoryNode quillSubDir = (DirectoryNode)
- quillDir.getEntry("QuillSub");
+ quillDir.getEntryCaseInsensitive("QuillSub");
dump001CompObj(quillSubDir);
dumpCONTENTSraw(quillSubDir);
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/HPBFPart.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/HPBFPart.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/HPBFPart.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/HPBFPart.java
Wed Sep 20 20:32:59 2023
@@ -44,7 +44,7 @@ public abstract class HPBFPart {
DirectoryNode dir = getDir(baseDir, path);
String name = path[path.length-1];
- if (!dir.hasEntry(name)) {
+ if (!dir.hasEntryCaseInsensitive(name)) {
throw new IllegalArgumentException("File invalid - failed to find
document entry '" + name + "'");
}
@@ -78,7 +78,7 @@ public abstract class HPBFPart {
DirectoryNode dir = baseDir;
for(int i=0; i<path.length-1; i++) {
try {
- dir = (DirectoryNode)dir.getEntry(path[i]);
+ dir = (DirectoryNode)dir.getEntryCaseInsensitive(path[i]);
} catch(FileNotFoundException e) {
dir.createDirectory(path[i]);
}
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/PPTXMLDump.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/PPTXMLDump.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/PPTXMLDump.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/PPTXMLDump.java
Wed Sep 20 20:32:59 2023
@@ -63,7 +63,7 @@ public final class PPTXMLDump {
private static byte[] readEntry(POIFSFileSystem fs, String entry)
throws IOException {
DirectoryNode dn = fs.getRoot();
- if (!dn.hasEntry(entry)) {
+ if (!dn.hasEntryCaseInsensitive(entry)) {
return null;
}
try (InputStream is = dn.createDocumentInputStream(entry);
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/CurrentUserAtom.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/CurrentUserAtom.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/CurrentUserAtom.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/CurrentUserAtom.java
Wed Sep 20 20:32:59 2023
@@ -140,7 +140,7 @@ public class CurrentUserAtom {
// See how long it is. If it's under 28 bytes long, we can't
// read it
if(_contents.length < 28) {
- boolean isPP95 = dir.hasEntry(PP95_DOCUMENT);
+ boolean isPP95 = dir.hasEntryCaseInsensitive(PP95_DOCUMENT);
// PPT95 has 4 byte size, then data
if (!isPP95 && _contents.length >= 4) {
int size = LittleEndian.getInt(_contents);
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShow.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShow.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShow.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShow.java
Wed Sep 20 20:32:59 2023
@@ -1047,7 +1047,7 @@ public final class HSLFSlideShow extends
Map<String,ClassID> olemap = getOleMap();
ClassID classID = null;
for (Map.Entry<String,ClassID> entry : olemap.entrySet()) {
- if (root.hasEntry(entry.getKey())) {
+ if (root.hasEntryCaseInsensitive(entry.getKey())) {
classID = entry.getValue();
break;
}
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
Wed Sep 20 20:32:59 2023
@@ -197,10 +197,10 @@ public final class HSLFSlideShowImpl ext
private static DirectoryNode handleDualStorage(DirectoryNode dir) throws
IOException {
// when there's a dual storage entry, use it, as the outer document
can't be read quite probably ...
- if (!dir.hasEntry(PP97_DOCUMENT)) {
+ if (!dir.hasEntryCaseInsensitive(PP97_DOCUMENT)) {
return dir;
}
- return (DirectoryNode) dir.getEntry(PP97_DOCUMENT);
+ return (DirectoryNode) dir.getEntryCaseInsensitive(PP97_DOCUMENT);
}
/**
@@ -226,12 +226,12 @@ public final class HSLFSlideShowImpl ext
private void readPowerPointStream() throws IOException {
final DirectoryNode dir = getDirectory();
- if (!dir.hasEntry(POWERPOINT_DOCUMENT) && dir.hasEntry(PP95_DOCUMENT))
{
+ if (!dir.hasEntryCaseInsensitive(POWERPOINT_DOCUMENT) &&
dir.hasEntryCaseInsensitive(PP95_DOCUMENT)) {
throw new OldPowerPointFormatException("You seem to have supplied
a PowerPoint95 file, which isn't supported");
}
// Get the main document stream
- final Entry entry = dir.getEntry(POWERPOINT_DOCUMENT);
+ final Entry entry = dir.getEntryCaseInsensitive(POWERPOINT_DOCUMENT);
if (!(entry instanceof DocumentEntry)) {
throw new IllegalArgumentException("Had unexpected type of entry
for name: " + POWERPOINT_DOCUMENT + ": " + entry.getClass());
}
@@ -399,12 +399,12 @@ public final class HSLFSlideShowImpl ext
private void readPictures() throws IOException {
// if the presentation doesn't contain pictures, will use an empty
collection instead
- if (!getDirectory().hasEntry("Pictures")) {
+ if (!getDirectory().hasEntryCaseInsensitive("Pictures")) {
_pictures = new ArrayList<>();
return;
}
- final Entry en = getDirectory().getEntry("Pictures");
+ final Entry en = getDirectory().getEntryCaseInsensitive("Pictures");
if (!(en instanceof DocumentEntry)) {
throw new IllegalArgumentException("Had unexpected type of entry
for name: Pictures: " + en.getClass());
}
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/HWPFDocument.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/HWPFDocument.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/HWPFDocument.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/HWPFDocument.java
Wed Sep 20 20:32:59 2023
@@ -261,7 +261,7 @@ public final class HWPFDocument extends
String name = (_fib.getFibBase().isFWhichTblStm()) ? STREAM_TABLE_1 :
STREAM_TABLE_0;
// Grab the table stream.
- if (!directory.hasEntry(name)) {
+ if (!directory.hasEntryCaseInsensitive(name)) {
throw new IllegalStateException("Table Stream '" + name + "'
wasn't found - Either the document is corrupt, or is Word95 (or earlier)");
}
@@ -271,7 +271,7 @@ public final class HWPFDocument extends
_fib.fillVariableFields(_mainStream, _tableStream);
// read in the data stream.
- _dataStream = directory.hasEntry(STREAM_DATA) ?
getDocumentEntryBytes(STREAM_DATA, 0, Integer.MAX_VALUE) : new byte[0];
+ _dataStream = directory.hasEntryCaseInsensitive(STREAM_DATA) ?
getDocumentEntryBytes(STREAM_DATA, 0, Integer.MAX_VALUE) : new byte[0];
// Get the cp of the start of text in the main stream
// The latest spec doc says this is always zero!
@@ -1033,4 +1033,4 @@ public final class HWPFDocument extends
Range r = new Range(start, start + length, this);
r.delete();
}
-}
\ No newline at end of file
+}
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/HWPFDocumentCore.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/HWPFDocumentCore.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/HWPFDocumentCore.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/HWPFDocumentCore.java
Wed Sep 20 20:32:59 2023
@@ -185,8 +185,8 @@ public abstract class HWPFDocumentCore e
_fib = new FileInformationBlock(_mainStream);
DirectoryEntry objectPoolEntry = null;
- if (directory.hasEntry(STREAM_OBJECT_POOL)) {
- final Entry entry = directory.getEntry(STREAM_OBJECT_POOL);
+ if (directory.hasEntryCaseInsensitive(STREAM_OBJECT_POOL)) {
+ final Entry entry =
directory.getEntryCaseInsensitive(STREAM_OBJECT_POOL);
if (!(entry instanceof DirectoryEntry)) {
throw new IllegalArgumentException("Had unexpected type of
entry for name: " + STREAM_OBJECT_POOL + ": " + entry.getClass());
}
@@ -341,7 +341,7 @@ public abstract class HWPFDocumentCore e
*/
protected byte[] getDocumentEntryBytes(String name, int encryptionOffset,
final int len) throws IOException {
DirectoryNode dir = getDirectory();
- final Entry entry = dir.getEntry(name);
+ final Entry entry = dir.getEntryCaseInsensitive(name);
if (!(entry instanceof DocumentEntry)) {
throw new IllegalArgumentException("Had unexpected type of entry
for name: " + name + ": " + entry);
}
@@ -368,4 +368,4 @@ public abstract class HWPFDocumentCore e
}
return new SequenceInputStream(new ByteArrayInputStream(plain), cis);
}
-}
\ No newline at end of file
+}
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/converter/WordToTextConverter.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/converter/WordToTextConverter.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/converter/WordToTextConverter.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/converter/WordToTextConverter.java
Wed Sep 20 20:32:59 2023
@@ -332,7 +332,7 @@ public class WordToTextConverter extends
* even if there is no ExtractorFactory in classpath, still support
* included Word's objects
*/
- if ( directoryNode.hasEntry( "WordDocument" ) )
+ if ( directoryNode.hasEntryCaseInsensitive( "WordDocument" ) )
{
String text = WordToTextConverter.getText( (DirectoryNode) entry );
block.appendChild( textDocumentFacade
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/ObjectPoolImpl.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/ObjectPoolImpl.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/ObjectPoolImpl.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/ObjectPoolImpl.java
Wed Sep 20 20:32:59 2023
@@ -42,7 +42,7 @@ public class ObjectPoolImpl implements O
try
{
- return _objectPool.getEntry( objId );
+ return _objectPool.getEntryCaseInsensitive( objId );
}
catch ( FileNotFoundException exc )
{
Modified:
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/TestReWrite.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/TestReWrite.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/TestReWrite.java
(original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/TestReWrite.java
Wed Sep 20 20:32:59 2023
@@ -92,20 +92,20 @@ public final class TestReWrite {
assertSlideShowWritesOutTheSame(hssC, pfsC);
// Currently has a Macros stream
- assertNotNull(pfsC.getRoot().getEntry("Macros"));
+ assertNotNull(pfsC.getRoot().getEntryCaseInsensitive("Macros"));
// Write out normally, will loose the macro stream
UnsynchronizedByteArrayOutputStream baos =
UnsynchronizedByteArrayOutputStream.builder().get();
hssC.write(baos);
try (POIFSFileSystem pfsNew = new
POIFSFileSystem(baos.toInputStream())) {
- assertFalse(pfsNew.getRoot().hasEntry("Macros"));
+
assertFalse(pfsNew.getRoot().hasEntryCaseInsensitive("Macros"));
}
// But if we write out with nodes preserved, will be there
baos.reset();
hssC.write(baos, true);
try (POIFSFileSystem pfsNew = new
POIFSFileSystem(baos.toInputStream())) {
- assertTrue(pfsNew.getRoot().hasEntry("Macros"));
+ assertTrue(pfsNew.getRoot().hasEntryCaseInsensitive("Macros"));
}
}
}
@@ -145,8 +145,8 @@ public final class TestReWrite {
private void assertSame(POIFSFileSystem origPFS, POIFSFileSystem newPFS)
throws IOException {
// Check that the "PowerPoint Document" sections have the same size
- DocumentEntry oProps = (DocumentEntry)
origPFS.getRoot().getEntry(POWERPOINT_DOCUMENT);
- DocumentEntry nProps = (DocumentEntry)
newPFS.getRoot().getEntry(POWERPOINT_DOCUMENT);
+ DocumentEntry oProps = (DocumentEntry)
origPFS.getRoot().getEntryCaseInsensitive(POWERPOINT_DOCUMENT);
+ DocumentEntry nProps = (DocumentEntry)
newPFS.getRoot().getEntryCaseInsensitive(POWERPOINT_DOCUMENT);
assertEquals(oProps.getSize(), nProps.getSize());
Modified:
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/extractor/TestExtractor.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/extractor/TestExtractor.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/extractor/TestExtractor.java
(original)
+++
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/extractor/TestExtractor.java
Wed Sep 20 20:32:59 2023
@@ -185,8 +185,8 @@ public final class TestExtractor {
};
for (int i=0; i<TEST_SET.length; i+=2) {
- DirectoryNode dir = (DirectoryNode)root.getEntry(TEST_SET[i]);
- assertTrue(dir.hasEntry(HSLFSlideShow.POWERPOINT_DOCUMENT));
+ DirectoryNode dir =
(DirectoryNode)root.getEntryCaseInsensitive(TEST_SET[i]);
+
assertTrue(dir.hasEntryCaseInsensitive(HSLFSlideShow.POWERPOINT_DOCUMENT));
try (final SlideShow<?,?> ppt = SlideShowFactory.create(dir);
final SlideShowExtractor<?,?> ppe = new
SlideShowExtractor<>(ppt)) {
Modified:
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/model/TestTextRunReWrite.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/model/TestTextRunReWrite.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/model/TestTextRunReWrite.java
(original)
+++
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/model/TestTextRunReWrite.java
Wed Sep 20 20:32:59 2023
@@ -79,8 +79,8 @@ public final class TestTextRunReWrite {
// Check that the "PowerPoint Document" sections have the same
size
DirectoryNode oDir = ppt1.getSlideShowImpl().getDirectory();
- DocumentEntry oProps = (DocumentEntry)
oDir.getEntry(HSLFSlideShow.POWERPOINT_DOCUMENT);
- DocumentEntry nProps = (DocumentEntry)
npfs.getRoot().getEntry(HSLFSlideShow.POWERPOINT_DOCUMENT);
+ DocumentEntry oProps = (DocumentEntry)
oDir.getEntryCaseInsensitive(HSLFSlideShow.POWERPOINT_DOCUMENT);
+ DocumentEntry nProps = (DocumentEntry)
npfs.getRoot().getEntryCaseInsensitive(HSLFSlideShow.POWERPOINT_DOCUMENT);
assertEquals(oProps.getSize(), nProps.getSize());
// Check that they contain the same data
@@ -130,8 +130,8 @@ public final class TestTextRunReWrite {
// Check that the "PowerPoint Document" sections have the same
size
DirectoryNode oDir = ppt1.getSlideShowImpl().getDirectory();
- DocumentEntry oProps = (DocumentEntry)
oDir.getEntry(HSLFSlideShow.POWERPOINT_DOCUMENT);
- DocumentEntry nProps = (DocumentEntry)
npfs.getRoot().getEntry(HSLFSlideShow.POWERPOINT_DOCUMENT);
+ DocumentEntry oProps = (DocumentEntry)
oDir.getEntryCaseInsensitive(HSLFSlideShow.POWERPOINT_DOCUMENT);
+ DocumentEntry nProps = (DocumentEntry)
npfs.getRoot().getEntryCaseInsensitive(HSLFSlideShow.POWERPOINT_DOCUMENT);
assertEquals(oProps.getSize(), nProps.getSize());
// Check that they contain the same data
Modified:
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestCurrentUserAtom.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestCurrentUserAtom.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestCurrentUserAtom.java
(original)
+++
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestCurrentUserAtom.java
Wed Sep 20 20:32:59 2023
@@ -76,7 +76,7 @@ public final class TestCurrentUserAtom {
// Get raw contents from a known file
byte[] contents;
try (POIFSFileSystem fs = new
POIFSFileSystem(_slTests.getFile(normalFile))) {
- DocumentEntry docProps = (DocumentEntry)
fs.getRoot().getEntry("Current User");
+ DocumentEntry docProps = (DocumentEntry)
fs.getRoot().getEntryCaseInsensitive("Current User");
contents = new byte[docProps.getSize()];
try (InputStream in =
fs.getRoot().createDocumentInputStream("Current User")) {
in.read(contents);
Modified:
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestExOleObjStg.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestExOleObjStg.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestExOleObjStg.java
(original)
+++
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestExOleObjStg.java
Wed Sep 20 20:32:59 2023
@@ -62,7 +62,7 @@ public final class TestExOleObjStg {
assertEquals(len, oledata.length);
try (POIFSFileSystem fs = new POIFSFileSystem(record.getData())) {
- DocumentEntry doc = (DocumentEntry)
fs.getRoot().getEntry("Contents");
+ DocumentEntry doc = (DocumentEntry)
fs.getRoot().getEntryCaseInsensitive("Contents");
assertNotNull(doc);
}
}
Modified:
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java
(original)
+++
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java
Wed Sep 20 20:32:59 2023
@@ -56,13 +56,13 @@ public final class TestPOIFSChunkParser
void testFindsCore() throws IOException, ChunkNotFoundException {
try (POIFSFileSystem simple = new
POIFSFileSystem(samples.getFile("quick.msg"), true)) {
- // Check a few core things are present
- simple.getRoot().getEntry(
- (new StringChunk(MAPIProperty.SUBJECT.id,
Types.ASCII_STRING)).getEntryName()
- );
- simple.getRoot().getEntry(
- (new StringChunk(MAPIProperty.SENDER_NAME.id,
Types.ASCII_STRING)).getEntryName()
- );
+ // Check a few core things are present
+ simple.getRoot().getEntryCaseInsensitive(
+ (new StringChunk(MAPIProperty.SUBJECT.id,
Types.ASCII_STRING)).getEntryName()
+ );
+ simple.getRoot().getEntryCaseInsensitive(
+ (new StringChunk(MAPIProperty.SENDER_NAME.id,
Types.ASCII_STRING)).getEntryName()
+ );
// Now load the file
try (MAPIMessage msg = new MAPIMessage(simple)) {
@@ -82,7 +82,7 @@ public final class TestPOIFSChunkParser
void testFindsRecips() throws IOException, ChunkNotFoundException {
try (POIFSFileSystem simple = new
POIFSFileSystem(samples.getFile("quick.msg"), true)) {
- simple.getRoot().getEntry("__recip_version1.0_#00000000");
+ simple.getRoot().getEntryCaseInsensitive("__recip_version1.0_#00000000");
ChunkGroup[] groups = POIFSChunkParser.parse(simple.getRoot());
assertEquals(3, groups.length);
@@ -136,12 +136,12 @@ public final class TestPOIFSChunkParser
void testFindsMultipleRecipients() throws IOException,
ChunkNotFoundException {
try (POIFSFileSystem multiple = new
POIFSFileSystem(samples.getFile("example_received_unicode.msg"), true)) {
- multiple.getRoot().getEntry("__recip_version1.0_#00000000");
- multiple.getRoot().getEntry("__recip_version1.0_#00000001");
- multiple.getRoot().getEntry("__recip_version1.0_#00000002");
- multiple.getRoot().getEntry("__recip_version1.0_#00000003");
- multiple.getRoot().getEntry("__recip_version1.0_#00000004");
- multiple.getRoot().getEntry("__recip_version1.0_#00000005");
+
multiple.getRoot().getEntryCaseInsensitive("__recip_version1.0_#00000000");
+
multiple.getRoot().getEntryCaseInsensitive("__recip_version1.0_#00000001");
+
multiple.getRoot().getEntryCaseInsensitive("__recip_version1.0_#00000002");
+
multiple.getRoot().getEntryCaseInsensitive("__recip_version1.0_#00000003");
+
multiple.getRoot().getEntryCaseInsensitive("__recip_version1.0_#00000004");
+
multiple.getRoot().getEntryCaseInsensitive("__recip_version1.0_#00000005");
ChunkGroup[] groups = POIFSChunkParser.parse(multiple.getRoot());
assertEquals(9, groups.length);
@@ -228,7 +228,7 @@ public final class TestPOIFSChunkParser
void testFindsNameId() throws IOException {
try (POIFSFileSystem simple = new
POIFSFileSystem(samples.getFile("quick.msg"), true)) {
- simple.getRoot().getEntry("__nameid_version1.0");
+ simple.getRoot().getEntryCaseInsensitive("__nameid_version1.0");
ChunkGroup[] groups = POIFSChunkParser.parse(simple.getRoot());
assertEquals(3, groups.length);
@@ -253,10 +253,11 @@ public final class TestPOIFSChunkParser
POIFSFileSystem without = new
POIFSFileSystem(samples.getFile("quick.msg"), true)) {
AttachmentChunks attachment;
- // Check raw details on the one with
- with.getRoot().getEntry("__attach_version1.0_#00000000");
- with.getRoot().getEntry("__attach_version1.0_#00000001");
- POIFSChunkParser.parse(with.getRoot());
+
+ // Check raw details on the one with
+ with.getRoot().getEntryCaseInsensitive("__attach_version1.0_#00000000");
+ with.getRoot().getEntryCaseInsensitive("__attach_version1.0_#00000001");
+ POIFSChunkParser.parse(with.getRoot());
ChunkGroup[] groups = POIFSChunkParser.parse(with.getRoot());
assertEquals(5, groups.length);
@@ -276,9 +277,10 @@ public final class TestPOIFSChunkParser
assertEquals("pj1.txt",
attachment.getAttachLongFileName().toString());
assertEquals(89, attachment.getAttachData().getValue().length);
- // Check raw details on one without
-
assertFalse(without.getRoot().hasEntry("__attach_version1.0_#00000000"));
-
assertFalse(without.getRoot().hasEntry("__attach_version1.0_#00000001"));
+
+ // Check raw details on one without
+
assertFalse(without.getRoot().hasEntryCaseInsensitive("__attach_version1.0_#00000000"));
+
assertFalse(without.getRoot().hasEntryCaseInsensitive("__attach_version1.0_#00000001"));
// One with, from the top
try (MAPIMessage msgWith = new MAPIMessage(with)) {
Modified:
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hwpf/HWPFDocFixture.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hwpf/HWPFDocFixture.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hwpf/HWPFDocFixture.java
(original)
+++
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hwpf/HWPFDocFixture.java
Wed Sep 20 20:32:59 2023
@@ -44,7 +44,7 @@ public final class HWPFDocFixture
POIDataSamples.getDocumentInstance().openResourceAsStream(_testFile));
DocumentEntry documentProps =
- (DocumentEntry) filesystem.getRoot().getEntry("WordDocument");
+ (DocumentEntry)
filesystem.getRoot().getEntryCaseInsensitive("WordDocument");
_mainStream = new byte[documentProps.getSize()];
filesystem.createDocumentInputStream("WordDocument").read(_mainStream);
@@ -59,7 +59,7 @@ public final class HWPFDocFixture
// read in the table stream.
DocumentEntry tableProps =
- (DocumentEntry) filesystem.getRoot().getEntry(name);
+ (DocumentEntry) filesystem.getRoot().getEntryCaseInsensitive(name);
_tableStream = new byte[tableProps.getSize()];
filesystem.createDocumentInputStream(name).read(_tableStream);
Modified:
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hwpf/extractor/TestWordExtractor.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hwpf/extractor/TestWordExtractor.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hwpf/extractor/TestWordExtractor.java
(original)
+++
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hwpf/extractor/TestWordExtractor.java
Wed Sep 20 20:32:59 2023
@@ -142,15 +142,15 @@ public final class TestWordExtractor {
POIFSFileSystem fs = new POIFSFileSystem(is);
is.close();
- DirectoryNode dirA = (DirectoryNode)
fs.getRoot().getEntry("MBD0000A3B7");
- DirectoryNode dirB = (DirectoryNode)
fs.getRoot().getEntry("MBD0000A3B2");
+ DirectoryNode dirA = (DirectoryNode)
fs.getRoot().getEntryCaseInsensitive("MBD0000A3B7");
+ DirectoryNode dirB = (DirectoryNode)
fs.getRoot().getEntryCaseInsensitive("MBD0000A3B2");
// Should have WordDocument and 1Table
- assertNotNull(dirA.getEntry("1Table"));
- assertNotNull(dirA.getEntry("WordDocument"));
+ assertNotNull(dirA.getEntryCaseInsensitive("1Table"));
+ assertNotNull(dirA.getEntryCaseInsensitive("WordDocument"));
- assertNotNull(dirB.getEntry("1Table"));
- assertNotNull(dirB.getEntry("WordDocument"));
+ assertNotNull(dirB.getEntryCaseInsensitive("1Table"));
+ assertNotNull(dirB.getEntryCaseInsensitive("WordDocument"));
// Check each in turn
HWPFDocument docA = new HWPFDocument(dirA);
@@ -402,6 +402,18 @@ public final class TestWordExtractor {
}
}
+ @Test
+ public void testCaseInsensitiveOLENames() throws Exception {
+ //test files are from Ross Johnson on TIKA-4091
+ for (String n : new String[]{"normal", "lower", "upper"}) {
+ try (InputStream is = docTests.openResourceAsStream("47950_" + n +
".doc");
+ POIFSFileSystem fs = new POIFSFileSystem(is);
+ WordExtractor wExt = new WordExtractor(fs)) {
+ assertContains(wExt.getText(), "This is a sample Word
document");
+ }
+ }
+ }
+
@Test
void testCapitalized() throws Exception {
try (WordExtractor wExt = openExtractor("capitalized.doc")) {
Modified: poi/trunk/poi/src/main/java/org/apache/poi/POIDocument.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/POIDocument.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/POIDocument.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/POIDocument.java Wed Sep 20
20:32:59 2023
@@ -222,7 +222,7 @@ public abstract class POIDocument implem
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 implem
}
//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 implem
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 {
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/extractor/ExtractorFactory.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/extractor/ExtractorFactory.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/extractor/ExtractorFactory.java
(original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/extractor/ExtractorFactory.java
Wed Sep 20 20:32:59 2023
@@ -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));
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/extractor/MainExtractorFactory.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/extractor/MainExtractorFactory.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/extractor/MainExtractorFactory.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/extractor/MainExtractorFactory.java
Wed Sep 20 20:32:59 2023
@@ -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 implem
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);
}
Modified: poi/trunk/poi/src/main/java/org/apache/poi/hpsf/PropertySet.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/hpsf/PropertySet.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/hpsf/PropertySet.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/hpsf/PropertySet.java Wed Sep 20
20:32:59 2023
@@ -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();
}
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/hssf/eventusermodel/HSSFEventFactory.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/hssf/eventusermodel/HSSFEventFactory.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/hssf/eventusermodel/HSSFEventFactory.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/hssf/eventusermodel/HSSFEventFactory.java
Wed Sep 20 20:32:59 2023
@@ -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);
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java
Wed Sep 20 20:32:59 2023
@@ -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 implement
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);
}
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java
(original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java
Wed Sep 20 20:32:59 2023
@@ -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}
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java
Wed Sep 20 20:32:59 2023
@@ -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 extend
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;
}
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java
Wed Sep 20 20:32:59 2023
@@ -290,7 +290,7 @@ public final class HSSFPatriarch impleme
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);
}
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
(original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
Wed Sep 20 20:32:59 2023
@@ -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
}
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
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
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
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());
}
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/DataSpaceMapUtils.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/DataSpaceMapUtils.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/DataSpaceMapUtils.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/DataSpaceMapUtils.java
Wed Sep 20 20:32:59 2023
@@ -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 -> {
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
Wed Sep 20 20:32:59 2023
@@ -173,9 +173,9 @@ public class CryptoAPIDecryptor extends
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();
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryEntry.java
Wed Sep 20 20:32:59 2023
@@ -76,14 +76,20 @@ public interface DirectoryEntry extends
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 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
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryNode.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryNode.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryNode.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DirectoryNode.java
Wed Sep 20 20:32:59 2023
@@ -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.Pro
* 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;
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java
Wed Sep 20 20:32:59 2023
@@ -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);
}
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/FilteringDirectoryNode.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/FilteringDirectoryNode.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/FilteringDirectoryNode.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/FilteringDirectoryNode.java
Wed Sep 20 20:32:59 2023
@@ -129,7 +129,7 @@ public class FilteringDirectoryNode impl
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 impl
}
@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 impl
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 impl
throw new UnsupportedOperationException("Remove not supported");
}
}
-}
\ No newline at end of file
+}
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/Ole10Native.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/Ole10Native.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/Ole10Native.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/Ole10Native.java
Wed Sep 20 20:32:59 2023
@@ -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());
}
}
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java?rev=1912438&r1=1912437&r2=1912438&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java
(original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java
Wed Sep 20 20:32:59 2023
@@ -325,7 +325,7 @@ public class VBAMacroReader implements C
//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;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]