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]

Reply via email to