Author: yegor
Date: Fri May 25 06:03:26 2007
New Revision: 541632

URL: http://svn.apache.org/viewvc?view=rev&rev=541632
Log:
fixed bug 42486:  Failure parsing a seemingly valid PPT. Some of the assertions 
in ExHyperlink were too strong. Write to log instead of throwing exception

Added:
    
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/42486.ppt   
(with props)
Modified:
    
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java
    
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java

Modified: 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java?view=diff&rev=541632&r1=541631&r2=541632
==============================================================================
--- 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java
 (original)
+++ 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java
 Fri May 25 06:03:26 2007
@@ -20,6 +20,7 @@
 import java.io.OutputStream;
 
 import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.POILogger;
 
 /**
  * This class represents the data of a link in the document. 
@@ -93,37 +94,25 @@
         *  methods.
         */     
        private void findInterestingChildren() {
-               // We need to have 2 children, ideally 3, and sometimes have 
more
-               if(_children.length < 2) {
-                       throw new IllegalStateException("We need at least two 
child records, but we only had " + _children.length);
-               }
 
                // First child should be the ExHyperlinkAtom
                if(_children[0] instanceof ExHyperlinkAtom) {
                        linkAtom = (ExHyperlinkAtom)_children[0];
                } else {
-                       throw new IllegalStateException("First child record 
wasn't a ExHyperlinkAtom, was of type " + _children[0].getRecordType());
-               }
-               
-               // Second child should be the first link details
-               if(_children[1] instanceof CString) {
-                       linkDetailsA = (CString)_children[1];
-               } else {
-                       throw new IllegalStateException("Second child record 
wasn't a CString, was of type " + _children[1].getRecordType());
+                       logger.log(POILogger.ERROR, "First child record wasn't 
a ExHyperlinkAtom, was of type " + _children[0].getRecordType());
                }
 
-               // Third child, if it exists, should be the second link details
-               if(_children.length >= 3) {
-                       if(_children[2] instanceof CString) {
-                               linkDetailsB = (CString)_children[2];
-                       } else {
-                               throw new IllegalStateException("Third child 
record wasn't a CString, was of type " + _children[2].getRecordType());
-                       }
-               } else {
-                       // Should be fine to not have one
-               }
+        for (int i = 1; i < _children.length; i++) {
+            if (_children[i] instanceof CString){
+                if ( linkDetailsA == null) linkDetailsA = 
(CString)_children[i];
+                else linkDetailsB = (CString)_children[i];
+            } else {
+                logger.log(POILogger.ERROR, "Record after ExHyperlinkAtom 
wasn't a CString, was of type " + _children[1].getRecordType());
+            }
+
+        }
        }
-       
+
        /**
         * Create a new ExHyperlink, with blank fields
         */

Added: 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/42486.ppt
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/42486.ppt?view=auto&rev=541632
==============================================================================
Binary file - no diff available.

Propchange: 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/42486.ppt
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java?view=diff&rev=541632&r1=541631&r2=541632
==============================================================================
--- 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java
 (original)
+++ 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java
 Fri May 25 06:03:26 2007
@@ -184,4 +184,21 @@
         }
     }
 
+    /**
+     * Bug 42486:  Failure parsing a seemingly valid PPT
+     */
+    public void test42486 () throws Exception {
+        FileInputStream is = new FileInputStream(new File(cwd, "42486.ppt"));
+        HSLFSlideShow hslf = new HSLFSlideShow(is);
+        is.close();
+
+        SlideShow ppt = new SlideShow(hslf);
+        Slide[] slide = ppt.getSlides();
+        for (int i = 0; i < slide.length; i++) {
+            Shape[] shape = slide[i].getShapes();
+        }
+        assertTrue("No Exceptions while reading file", true);
+
+    }
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/

Reply via email to