mirror of https://github.com/apache/poi.git
Bug 63200: Avoid NullPointerException in XSLFShape.selectPaint() and check some more in integration tests
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1854639 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
53a30d796e
commit
a9b2a8b2bd
|
@ -16,8 +16,18 @@
|
|||
==================================================================== */
|
||||
package org.apache.poi.stress;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import org.apache.poi.sl.draw.Drawable;
|
||||
import org.apache.poi.sl.usermodel.GroupShape;
|
||||
import org.apache.poi.sl.usermodel.Notes;
|
||||
import org.apache.poi.sl.usermodel.PictureData;
|
||||
import org.apache.poi.sl.usermodel.Shape;
|
||||
import org.apache.poi.sl.usermodel.SimpleShape;
|
||||
import org.apache.poi.sl.usermodel.Slide;
|
||||
import org.apache.poi.sl.usermodel.SlideShow;
|
||||
import org.apache.poi.sl.usermodel.SlideShowFactory;
|
||||
import org.apache.poi.sl.usermodel.TextParagraph;
|
||||
import org.apache.poi.sl.usermodel.TextRun;
|
||||
import org.apache.poi.sl.usermodel.TextShape;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
|
@ -28,16 +38,8 @@ import java.io.ByteArrayOutputStream;
|
|||
import java.io.IOException;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
import org.apache.poi.sl.draw.Drawable;
|
||||
import org.apache.poi.sl.usermodel.PictureData;
|
||||
import org.apache.poi.sl.usermodel.Shape;
|
||||
import org.apache.poi.sl.usermodel.ShapeContainer;
|
||||
import org.apache.poi.sl.usermodel.Slide;
|
||||
import org.apache.poi.sl.usermodel.SlideShow;
|
||||
import org.apache.poi.sl.usermodel.SlideShowFactory;
|
||||
import org.apache.poi.sl.usermodel.TextParagraph;
|
||||
import org.apache.poi.sl.usermodel.TextRun;
|
||||
import org.apache.poi.sl.usermodel.TextShape;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public abstract class SlideShowHandler extends POIFSFileHandler {
|
||||
public void handleSlideShow(SlideShow<?,?> ss) throws IOException {
|
||||
|
@ -73,20 +75,50 @@ public abstract class SlideShowHandler extends POIFSFileHandler {
|
|||
private void readContent(SlideShow<?,?> ss) {
|
||||
for (Slide<?,?> s : ss.getSlides()) {
|
||||
s.getTitle();
|
||||
readText(s);
|
||||
readText(s.getNotes());
|
||||
readText(s.getMasterSheet());
|
||||
|
||||
for (Shape<?,?> shape : s) {
|
||||
readShapes(shape);
|
||||
}
|
||||
|
||||
Notes<?, ?> notes = s.getNotes();
|
||||
if(notes != null) {
|
||||
for (Shape<?, ?> shape : notes) {
|
||||
readShapes(shape);
|
||||
}
|
||||
}
|
||||
|
||||
for (Shape<?,?> shape : s.getMasterSheet()) {
|
||||
readShapes(shape);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void readText(ShapeContainer<?,?> sc) {
|
||||
if (sc == null) return;
|
||||
for (Shape<?,?> s : sc) {
|
||||
if (s instanceof TextShape) {
|
||||
for (TextParagraph<?,?,?> tp : (TextShape<?,?>)s) {
|
||||
for (TextRun tr : tp) {
|
||||
tr.getRawText();
|
||||
}
|
||||
|
||||
private void readShapes(Shape<?,?> s) {
|
||||
// recursively walk group-shapes
|
||||
if(s instanceof GroupShape) {
|
||||
GroupShape<? extends Shape, ?> shapes = (GroupShape<? extends Shape, ?>) s;
|
||||
for (Shape<? extends Shape, ?> shape : shapes) {
|
||||
readShapes(shape);
|
||||
}
|
||||
}
|
||||
|
||||
if(s instanceof SimpleShape) {
|
||||
SimpleShape<?, ?> simpleShape = (SimpleShape<?, ?>) s;
|
||||
|
||||
simpleShape.getFillColor();
|
||||
simpleShape.getFillStyle();
|
||||
simpleShape.getStrokeStyle();
|
||||
simpleShape.getLineDecoration();
|
||||
}
|
||||
|
||||
readText(s);
|
||||
}
|
||||
|
||||
private void readText(Shape<?,?> s) {
|
||||
if (s instanceof TextShape) {
|
||||
for (TextParagraph<?,?,?> tp : (TextShape<?,?>)s) {
|
||||
for (TextRun tr : tp) {
|
||||
tr.getRawText();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -407,7 +407,10 @@ public class DrawPaint {
|
|||
// snapToAnchor(p2, anchor);
|
||||
|
||||
// gradient paint on the same point throws an exception ... and doesn't make sense
|
||||
return (p1.equals(p2)) ? null : safeFractions((f,c)->new LinearGradientPaint(p1,p2,f,c), fill);
|
||||
// also having less than two fractions will not work
|
||||
return (p1.equals(p2) || fill.getGradientFractions().length < 2) ?
|
||||
null :
|
||||
safeFractions((f,c)->new LinearGradientPaint(p1,p2,f,c), fill);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -112,7 +112,7 @@ public class XDDFGradientFillProperties implements XDDFFillProperties {
|
|||
.getGsLst()
|
||||
.getGsList()
|
||||
.stream()
|
||||
.map(gs -> new XDDFGradientStop(gs))
|
||||
.map(XDDFGradientStop::new)
|
||||
.collect(Collectors.toList()));
|
||||
} else {
|
||||
return Collections.emptyList();
|
||||
|
|
|
@ -431,7 +431,8 @@ public abstract class XSLFShape implements Shape<XSLFShape,XSLFTextParagraph> {
|
|||
protected static PaintStyle selectPaint(final CTGradientFillProperties gradFill, CTSchemeColor phClr, final XSLFTheme theme) {
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
final CTGradientStop[] gs = gradFill.getGsLst().getGsArray();
|
||||
final CTGradientStop[] gs = gradFill.getGsLst() == null ?
|
||||
new CTGradientStop[0] : gradFill.getGsLst().getGsArray();
|
||||
|
||||
Arrays.sort(gs, (o1, o2) -> {
|
||||
int pos1 = o1.getPos();
|
||||
|
|
|
@ -966,4 +966,21 @@ public class TestXSLFBugs {
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void bug63200() throws Exception {
|
||||
try (XMLSlideShow ss1 = XSLFTestDataSamples.openSampleDocument("63200.pptx")) {
|
||||
assertEquals(1, ss1.getSlides().size());
|
||||
|
||||
XSLFSlide slide = ss1.getSlides().get(0);
|
||||
|
||||
assertEquals(slide.getShapes().size(), 1);
|
||||
XSLFGroupShape group = (XSLFGroupShape) slide.getShapes().get(0);
|
||||
assertEquals(group.getShapes().size(), 2);
|
||||
XSLFAutoShape oval = (XSLFAutoShape) group.getShapes().get(0);
|
||||
XSLFAutoShape arrow = (XSLFAutoShape) group.getShapes().get(1);
|
||||
assertNull(oval.getFillColor());
|
||||
assertNull(arrow.getFillColor());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue