Author: nick
Date: Tue Dec 4 04:55:26 2007
New Revision: 600916
URL: http://svn.apache.org/viewvc?rev=600916&view=rev
Log:
SBAT fix from bug #11744
Modified:
poi/trunk/src/documentation/content/xdocs/hssf/quick-guide.xml
poi/trunk/src/java/org/apache/poi/poifs/storage/SmallBlockTableWriter.java
poi/trunk/src/java/org/apache/poi/util/IOUtils.java
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestEmptyDocument.java
Modified: poi/trunk/src/documentation/content/xdocs/hssf/quick-guide.xml
URL:
http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/hssf/quick-guide.xml?rev=600916&r1=600915&r2=600916&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/hssf/quick-guide.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/hssf/quick-guide.xml Tue Dec 4
04:55:26 2007
@@ -247,7 +247,7 @@
and HSSFSheet provides a <em>rowIterator()</em>
method to
give an iterator over all the rows.</p>
<source>
- HSSFSheet sheet = wb.getSheetAt(0);
+ HSSFSheet sheet = wb.getSheetAt(0);
for (HSSFRow row : sheet.rowIterator()) {
for (HSSFCell cell : row.cellIterator()) {
// Do something here
Modified:
poi/trunk/src/java/org/apache/poi/poifs/storage/SmallBlockTableWriter.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/storage/SmallBlockTableWriter.java?rev=600916&r1=600915&r2=600916&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/storage/SmallBlockTableWriter.java
(original)
+++ poi/trunk/src/java/org/apache/poi/poifs/storage/SmallBlockTableWriter.java
Tue Dec 4 04:55:26 2007
@@ -19,6 +19,7 @@
package org.apache.poi.poifs.storage;
+import org.apache.poi.poifs.common.POIFSConstants;
import org.apache.poi.poifs.filesystem.BATManaged;
import org.apache.poi.poifs.filesystem.POIFSDocument;
import org.apache.poi.poifs.property.RootProperty;
@@ -69,6 +70,8 @@
{
_small_blocks.add(blocks[ j ]);
}
+ } else {
+ doc.setStartBlock(POIFSConstants.END_OF_CHAIN);
}
}
_sbat.simpleCreateBlocks();
Modified: poi/trunk/src/java/org/apache/poi/util/IOUtils.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/IOUtils.java?rev=600916&r1=600915&r2=600916&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/IOUtils.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/IOUtils.java Tue Dec 4 04:55:26 2007
@@ -19,6 +19,7 @@
package org.apache.poi.util;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -26,6 +27,25 @@
{
private IOUtils()
{
+ }
+
+ /**
+ * Reads all the data from the input stream, and returns
+ * the bytes read.
+ */
+ public static byte[] toByteArray(InputStream stream) throws IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ byte[] buffer = new byte[4096];
+ int read = 0;
+ while(read != -1) {
+ read = stream.read(buffer);
+ if(read > 0) {
+ baos.write(buffer, 0, read);
+ }
+ }
+
+ return baos.toByteArray();
}
/**
Modified:
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestEmptyDocument.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestEmptyDocument.java?rev=600916&r1=600915&r2=600916&view=diff
==============================================================================
---
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestEmptyDocument.java
(original)
+++
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestEmptyDocument.java
Tue Dec 4 04:55:26 2007
@@ -23,6 +23,7 @@
import junit.framework.TestCase;
+import org.apache.poi.util.IOUtils;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.poifs.filesystem.POIFSWriterEvent;
import org.apache.poi.poifs.filesystem.POIFSWriterListener;
@@ -140,4 +141,28 @@
fs.writeFilesystem(out);
new POIFSFileSystem(new ByteArrayInputStream(out.toByteArray()));
}
+
+ public void testEmptyDocumentBug11744() throws Exception {
+ byte[] testData = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+
+ POIFSFileSystem fs = new POIFSFileSystem();
+ fs.createDocument(new ByteArrayInputStream(new byte[0]), "Empty");
+ fs.createDocument(new ByteArrayInputStream(testData), "NotEmpty");
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ fs.writeFilesystem(out);
+ out.toByteArray();
+
+ // This line caused the error.
+ fs = new POIFSFileSystem(new ByteArrayInputStream(out.toByteArray()));
+
+ DocumentEntry entry = (DocumentEntry) fs.getRoot().getEntry("Empty");
+ assertEquals("Expected zero size", 0, entry.getSize());
+ assertEquals("Expected zero read from stream", 0,
+ IOUtils.toByteArray(new
DocumentInputStream(entry)).length);
+
+ entry = (DocumentEntry) fs.getRoot().getEntry("NotEmpty");
+ assertEquals("Expected size was wrong", testData.length,
entry.getSize());
+ assertEquals("Expected different data read from stream", testData,
+ IOUtils.toByteArray(new DocumentInputStream(entry)));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]