You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by ye...@apache.org on 2007/05/26 09:22:53 UTC
svn commit: r541867 - in /jakarta/poi/trunk/src/scratchpad:
src/org/apache/poi/hslf/ src/org/apache/poi/hslf/model/
testcases/org/apache/poi/hslf/data/ testcases/org/apache/poi/hslf/model/
testcases/org/apache/poi/hslf/usermodel/
Author: yegor
Date: Sat May 26 00:22:51 2007
New Revision: 541867
URL: http://svn.apache.org/viewvc?view=rev&rev=541867
Log:
fixed bug 42520: NPE in Picture.getPictureData() and bug 42524: NPE in Shape.getShapeType(); Also changed the code to write messages to POILogger instead of System.err/System.out
Added:
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/42520.ppt (with props)
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Shape.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeGroup.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextBox.java
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestSheet.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/HSLFSlideShow.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java?view=diff&rev=541867&r1=541866&r2=541867
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java (original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java Sat May 26 00:22:51 2007
@@ -25,6 +25,8 @@
import org.apache.poi.POIDocument;
import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.POILogger;
+import org.apache.poi.util.POILogFactory;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.DocumentInputStream;
@@ -50,6 +52,9 @@
public class HSLFSlideShow extends POIDocument
{
+ // For logging
+ protected POILogger logger = POILogFactory.getLogger(this.getClass());
+
private InputStream istream;
// Holds metadata on where things are in our document
@@ -226,7 +231,7 @@
try {
currentUser = new CurrentUserAtom(filesystem);
} catch(IOException ie) {
- System.err.println("Error finding Current User Atom:\n" + ie);
+ logger.log(POILogger.ERROR, "Error finding Current User Atom:\n" + ie);
currentUser = new CurrentUserAtom();
}
}
@@ -281,8 +286,8 @@
// If they type (including the bonus 0xF018) is 0, skip it
if(type == 0) {
- System.err.println("Problem reading picture: Invalid image type 0, on picture with length " + imgsize + ".\nYou document will probably become corrupted if you save it!");
- System.err.println(pos);
+ logger.log(POILogger.ERROR, "Problem reading picture: Invalid image type 0, on picture with length " + imgsize + ".\nYou document will probably become corrupted if you save it!");
+ logger.log(POILogger.ERROR, "" + pos);
} else {
// Copy the data, ready to pass to PictureData
byte[] imgdata = new byte[imgsize];
@@ -297,7 +302,7 @@
pict.setOffset(offset);
p.add(pict);
} catch(IllegalArgumentException e) {
- System.err.println("Problem reading picture: " + e + "\nYou document will probably become corrupted if you save it!");
+ logger.log(POILogger.ERROR, "Problem reading picture: " + e + "\nYou document will probably become corrupted if you save it!");
}
}
Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java?view=diff&rev=541867&r1=541866&r2=541867
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java (original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java Sat May 26 00:22:51 2007
@@ -21,6 +21,7 @@
import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.hslf.record.Document;
import org.apache.poi.hslf.blip.Bitmap;
+import org.apache.poi.util.POILogger;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
@@ -99,7 +100,7 @@
public int getPictureIndex(){
EscherOptRecord opt = (EscherOptRecord)getEscherChild(_escherContainer, EscherOptRecord.RECORD_ID);
EscherSimpleProperty prop = (EscherSimpleProperty)getEscherProperty(opt, EscherProperties.BLIP__BLIPTODISPLAY + 0x4000);
- return prop.getPropertyValue();
+ return prop == null ? 0 : prop.getPropertyValue();
}
/**
@@ -166,14 +167,18 @@
EscherContainerRecord bstore = (EscherContainerRecord)Shape.getEscherChild(dggContainer, EscherContainerRecord.BSTORE_CONTAINER);
List lst = bstore.getChildRecords();
- int idx = getPictureIndex()-1;
- EscherBSERecord bse = (EscherBSERecord)lst.get(idx);
- for ( int i = 0; i < pict.length; i++ ) {
- if (pict[i].getOffset() == bse.getOffset()){
- return pict[i];
+ int idx = getPictureIndex();
+ if (idx == 0){
+ logger.log(POILogger.ERROR, "no reference to picture data found ");
+ } else {
+ EscherBSERecord bse = (EscherBSERecord)lst.get(idx-1);
+ for ( int i = 0; i < pict.length; i++ ) {
+ if (pict[i].getOffset() == bse.getOffset()){
+ return pict[i];
+ }
}
+ logger.log(POILogger.ERROR, "no picture found for our BSE offset " + bse.getOffset());
}
- System.err.println("Warning - no picture found for our BSE offset " + bse.getOffset());
return null;
}
Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Shape.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Shape.java?view=diff&rev=541867&r1=541866&r2=541867
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Shape.java (original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Shape.java Sat May 26 00:22:51 2007
@@ -19,6 +19,8 @@
import org.apache.poi.ddf.*;
import org.apache.poi.hslf.model.ShapeTypes;
import org.apache.poi.hslf.record.ColorSchemeAtom;
+import org.apache.poi.util.POILogger;
+import org.apache.poi.util.POILogFactory;
import java.util.Iterator;
import java.awt.*;
@@ -41,6 +43,9 @@
*/
public abstract class Shape {
+ // For logging
+ protected POILogger logger = POILogFactory.getLogger(this.getClass());
+
/**
* In Escher absolute distances are specified in
* English Metric Units (EMUs), occasionally referred to as A units;
@@ -110,8 +115,7 @@
* @return name of the shape.
*/
public String getShapeName(){
- EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID);
- return ShapeTypes.typeName(spRecord.getOptions() >> 4);
+ return ShapeTypes.typeName(getShapeType());
}
/**
Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeGroup.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeGroup.java?view=diff&rev=541867&r1=541866&r2=541867
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeGroup.java (original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/ShapeGroup.java Sat May 26 00:22:51 2007
@@ -18,6 +18,7 @@
import org.apache.poi.ddf.*;
import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.POILogger;
import java.util.ArrayList;
import java.util.List;
@@ -69,7 +70,7 @@
} else {
// Should we do anything special with these non
// Container records?
- System.err.println("Shape contained non container escher record, was " + r.getClass().getName());
+ logger.log(POILogger.ERROR, "Shape contained non container escher record, was " + r.getClass().getName());
}
}
@@ -197,4 +198,17 @@
anchor.height = (spgr.getRectY2() - spgr.getRectY1())*POINT_DPI/MASTER_DPI;
return anchor;
}
+
+ /**
+ * Return type of the shape.
+ * In most cases shape group type is {@link org.apache.poi.hslf.model.ShapeTypes#NotPrimitive}
+ *
+ * @return type of the shape.
+ */
+ public int getShapeType(){
+ EscherContainerRecord groupInfoContainer = (EscherContainerRecord)_escherContainer.getChild(0);
+ EscherSpRecord spRecord = groupInfoContainer.getChildById(EscherSpRecord.RECORD_ID);
+ return spRecord.getOptions() >> 4;
+ }
+
}
Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextBox.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextBox.java?view=diff&rev=541867&r1=541866&r2=541867
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextBox.java (original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextBox.java Sat May 26 00:22:51 2007
@@ -22,6 +22,7 @@
import org.apache.poi.hslf.record.*;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.exceptions.HSLFException;
+import org.apache.poi.util.POILogger;
import java.awt.*;
import java.awt.font.FontRenderContext;
@@ -500,7 +501,7 @@
_txtrun = new TextRun(tha,tca,sta);
} else {
// Empty text box
- System.err.println("Warning - no text records found for TextBox");
+ logger.log(POILogger.WARN, "no text records found for TextBox");
}
}
}
Added: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/42520.ppt
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/42520.ppt?view=auto&rev=541867
==============================================================================
Binary file - no diff available.
Propchange: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/42520.ppt
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestSheet.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestSheet.java?view=diff&rev=541867&r1=541866&r2=541867
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestSheet.java (original)
+++ jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestSheet.java Sat May 26 00:22:51 2007
@@ -71,6 +71,8 @@
}
private void verify(Sheet sheet){
+ assertNotNull(sheet.getSlideShow());
+
ColorSchemeAtom colorscheme = sheet.getColorScheme();
assertNotNull(colorscheme);
@@ -92,9 +94,11 @@
Shape[] shape = sheet.getShapes();
assertTrue(shape != null);
for (int i = 0; i < shape.length; i++) {
+ assertNotNull(shape[i].getSpContainer());
assertNotNull(shape[i].getSheet());
+ assertNotNull(shape[i].getShapeName());
+ assertNotNull(shape[i].getAnchor());
}
- assertNotNull(sheet.getSlideShow());
}
}
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=541867&r1=541866&r2=541867
==============================================================================
--- 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 Sat May 26 00:22:51 2007
@@ -20,10 +20,12 @@
import junit.framework.TestCase;
import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.*;
+import org.apache.poi.hslf.model.Shape;
import java.io.*;
import java.util.HashSet;
import java.util.HashMap;
+import java.awt.*;
/**
* Testcases for bugs entered in bugzilla
@@ -196,6 +198,72 @@
Slide[] slide = ppt.getSlides();
for (int i = 0; i < slide.length; i++) {
Shape[] shape = slide[i].getShapes();
+ }
+ assertTrue("No Exceptions while reading file", true);
+
+ }
+
+ /**
+ * Bug 42524: NPE in Shape.getShapeType()
+ */
+ public void test42524 () throws Exception {
+ FileInputStream is = new FileInputStream(new File(cwd, "42486.ppt")); //test file is the same as for Bug 42486
+ HSLFSlideShow hslf = new HSLFSlideShow(is);
+ is.close();
+
+ SlideShow ppt = new SlideShow(hslf);
+ //walk down the tree and see if there were no errors while reading
+ Slide[] slide = ppt.getSlides();
+ for (int i = 0; i < slide.length; i++) {
+ Shape[] shape = slide[i].getShapes();
+ for (int j = 0; j < shape.length; j++) {
+ assertNotNull(shape[j].getShapeName());
+ if (shape[j] instanceof ShapeGroup){
+ ShapeGroup group = (ShapeGroup)shape[j];
+ Shape[] comps = group.getShapes();
+ for (int k = 0; k < comps.length; k++) {
+ assertNotNull(comps[k].getShapeName());
+ }
+ }
+ }
+
+ }
+ assertTrue("No Exceptions while reading file", true);
+
+ }
+
+ /**
+ * Bug 42520: NPE in Picture.getPictureData()
+ */
+ public void test42520 () throws Exception {
+ FileInputStream is = new FileInputStream(new File(cwd, "42520.ppt")); //test file is the same as for Bug 42486
+ HSLFSlideShow hslf = new HSLFSlideShow(is);
+ is.close();
+
+ SlideShow ppt = new SlideShow(hslf);
+
+ //test case from the bug report
+ ShapeGroup shapeGroup = (ShapeGroup)ppt.getSlides()[11].getShapes()[10];
+ Picture picture = (Picture)shapeGroup.getShapes()[0];
+ picture.getPictureData();
+
+ //walk down the tree and see if there were no errors while reading
+ Slide[] slide = ppt.getSlides();
+ for (int i = 0; i < slide.length; i++) {
+ Shape[] shape = slide[i].getShapes();
+ for (int j = 0; j < shape.length; j++) {
+ if (shape[j] instanceof ShapeGroup){
+ ShapeGroup group = (ShapeGroup)shape[j];
+ Shape[] comps = group.getShapes();
+ for (int k = 0; k < comps.length; k++) {
+ Shape comp = comps[k];
+ if (comp instanceof Picture){
+ PictureData pict = ((Picture)comp).getPictureData();
+ }
+ }
+ }
+ }
+
}
assertTrue("No Exceptions while reading file", true);
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/