You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2010/10/22 19:23:40 UTC
svn commit: r1026412 - in /poi/trunk: src/documentation/content/xdocs/
src/java/org/apache/poi/poifs/filesystem/
src/testcases/org/apache/poi/poifs/filesystem/ test-data/poifs/
Author: nick
Date: Fri Oct 22 17:23:39 2010
New Revision: 1026412
URL: http://svn.apache.org/viewvc?rev=1026412&view=rev
Log:
Fix bug #50118
Added:
poi/trunk/test-data/poifs/Notes.ole2 (with props)
Modified:
poi/trunk/src/documentation/content/xdocs/status.xml
poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSDocumentPath.java
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestPOIFSDocumentPath.java
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestPOIFSFileSystem.java
Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1026412&r1=1026411&r2=1026412&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Fri Oct 22 17:23:39 2010
@@ -34,6 +34,7 @@
<changes>
<release version="3.8-beta1" date="2010-??-??">
+ <action dev="poi-developers" type="fix">50118 - OLE2 does allow a directory with an empty name, so support this in POIFS</action>
<action dev="poi-developers" type="fix">50119 - avoid NPE when XSSFReader comes across chart sheets</action>
</release>
<release version="3.7" date="2010-10-25">
Modified: poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSDocumentPath.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSDocumentPath.java?rev=1026412&r1=1026411&r2=1026412&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSDocumentPath.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSDocumentPath.java Fri Oct 22 17:23:39 2010
@@ -21,6 +21,9 @@ package org.apache.poi.poifs.filesystem;
import java.io.File;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
+
/**
* Class POIFSDocumentPath
*
@@ -30,6 +33,8 @@ import java.io.File;
public class POIFSDocumentPath
{
+ private static final POILogger log = POILogFactory.getLogger(POIFSDocumentPath.class);
+
private String[] components;
private int hashcode = 0;
@@ -125,12 +130,17 @@ public class POIFSDocumentPath
{
for (int j = 0; j < components.length; j++)
{
- if ((components[ j ] == null)
- || (components[ j ].length() == 0))
+ if (components[ j ] == null)
{
throw new IllegalArgumentException(
- "components cannot contain null or empty strings");
+ "components cannot contain null");
+ }
+ if (components[ j ].length() == 0)
+ {
+ log.log(POILogger.WARN, "Directory under " + path + " has an empty name, " +
+ "not all OLE2 readers will handle this file correctly!");
}
+
this.components[ j + path.components.length ] =
components[ j ];
}
Modified: poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestPOIFSDocumentPath.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestPOIFSDocumentPath.java?rev=1026412&r1=1026411&r2=1026412&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestPOIFSDocumentPath.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestPOIFSDocumentPath.java Fri Oct 22 17:23:39 2010
@@ -165,24 +165,40 @@ public final class TestPOIFSDocumentPath
}
}
- // test weird variants
+ // Test weird variants
+
+ // This one is allowed, even if it's really odd
assertEquals(n, new POIFSDocumentPath(base, null).length());
+ new POIFSDocumentPath(base, new String[]
+ {
+ "fu", ""
+ });
+
+ // This one is allowed too
+ new POIFSDocumentPath(base, new String[]
+ {
+ "", "fu"
+ });
+
+ // This one shouldn't be allowed
try
{
new POIFSDocumentPath(base, new String[]
{
- "fu", ""
+ "fu", null
});
fail("should have caught IllegalArgumentException");
}
catch (IllegalArgumentException ignored)
{
}
+
+ // Ditto
try
{
new POIFSDocumentPath(base, new String[]
{
- "fu", null
+ null, "fu"
});
fail("should have caught IllegalArgumentException");
}
Modified: poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestPOIFSFileSystem.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestPOIFSFileSystem.java?rev=1026412&r1=1026411&r2=1026412&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestPOIFSFileSystem.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestPOIFSFileSystem.java Fri Oct 22 17:23:39 2010
@@ -22,6 +22,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Iterator;
import junit.framework.TestCase;
@@ -226,6 +227,43 @@ public final class TestPOIFSFileSystem e
}
}
}
+
+ /**
+ * Test that we can open files that come via Lotus notes.
+ * These have a top level directory without a name....
+ */
+ public void testNotesOLE2Files() throws Exception {
+ POIDataSamples _samples = POIDataSamples.getPOIFSInstance();
+
+ // Open the file up
+ POIFSFileSystem fs = new POIFSFileSystem(
+ _samples.openResourceAsStream("Notes.ole2")
+ );
+
+ // Check the contents
+ assertEquals(1, fs.getRoot().getEntryCount());
+
+ Entry entry = fs.getRoot().getEntries().next();
+ assertTrue(entry.isDirectoryEntry());
+ assertTrue(entry instanceof DirectoryEntry);
+
+ // The directory lacks a name!
+ DirectoryEntry dir = (DirectoryEntry)entry;
+ assertEquals("", dir.getName());
+
+ // Has two children
+ assertEquals(2, dir.getEntryCount());
+
+ // Check them
+ Iterator<Entry> it = dir.getEntries();
+ entry = it.next();
+ assertEquals(true, entry.isDocumentEntry());
+ assertEquals("\u0001Ole10Native", entry.getName());
+
+ entry = it.next();
+ assertEquals(true, entry.isDocumentEntry());
+ assertEquals("\u0001CompObj", entry.getName());
+ }
private static InputStream openSampleStream(String sampleFileName) {
return HSSFTestDataSamples.openSampleFileStream(sampleFileName);
Added: poi/trunk/test-data/poifs/Notes.ole2
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/poifs/Notes.ole2?rev=1026412&view=auto
==============================================================================
Binary file - no diff available.
Propchange: poi/trunk/test-data/poifs/Notes.ole2
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org