From 6aa54cb23070feff2de323a3ea020d7f0dc294a5 Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Mon, 16 May 2016 21:04:00 +0000 Subject: [PATCH] #54570 - InvalidFormatException because of Absolute URI forbidden git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1744137 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xslf/usermodel/XMLSlideShow.java | 2 +- .../TestXSLFPowerPointExtractor.java | 398 +++++++++--------- src/testcases/org/apache/poi/POITestCase.java | 103 ++--- test-data/slideshow/bug54570.pptx | Bin 0 -> 50589 bytes 4 files changed, 246 insertions(+), 257 deletions(-) create mode 100644 test-data/slideshow/bug54570.pptx diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java index 64177bcb26..a4e2a670b1 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java @@ -191,7 +191,7 @@ implements SlideShow { List mediaParts = getPackage().getPartsByName(Pattern.compile("/ppt/media/.*?")); _pictures = new ArrayList(mediaParts.size()); for(PackagePart part : mediaParts){ - XSLFPictureData pd = new XSLFPictureData(part, null); + XSLFPictureData pd = new XSLFPictureData(part); pd.setIndex(_pictures.size()); _pictures.add(pd); } diff --git a/src/ooxml/testcases/org/apache/poi/xslf/extractor/TestXSLFPowerPointExtractor.java b/src/ooxml/testcases/org/apache/poi/xslf/extractor/TestXSLFPowerPointExtractor.java index 346aeab898..d3c7c97db7 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/extractor/TestXSLFPowerPointExtractor.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/extractor/TestXSLFPowerPointExtractor.java @@ -16,104 +16,107 @@ ==================================================================== */ package org.apache.poi.xslf.extractor; +import static org.apache.poi.POITestCase.assertContains; +import static org.apache.poi.POITestCase.assertNotContained; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.io.InputStream; + import org.apache.poi.POIDataSamples; import org.apache.poi.POITextExtractor; import org.apache.poi.extractor.ExtractorFactory; +import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.xslf.usermodel.XSLFSlideShow; - -import junit.framework.TestCase; +import org.apache.poi.xslf.usermodel.XMLSlideShow; +import org.apache.xmlbeans.XmlException; +import org.junit.Test; /** - * Tests for HXFPowerPointExtractor + * Tests for XSLFPowerPointExtractor */ -public class TestXSLFPowerPointExtractor extends TestCase { - /** - * A simple file - */ - private XSLFSlideShow xmlA; - private OPCPackage pkg; - - private POIDataSamples slTests = POIDataSamples.getSlideShowInstance(); - - protected void setUp() throws Exception { - slTests = POIDataSamples.getSlideShowInstance(); - pkg = OPCPackage.open(slTests.openResourceAsStream("sample.pptx")); - xmlA = new XSLFSlideShow(pkg); - } +public class TestXSLFPowerPointExtractor { + private static POIDataSamples slTests = POIDataSamples.getSlideShowInstance(); /** * Get text out of the simple file + * @throws XmlException + * @throws OpenXML4JException */ - public void testGetSimpleText() throws Exception { - new XSLFPowerPointExtractor(xmlA).close(); + @Test + public void testGetSimpleText() + throws IOException, XmlException, OpenXML4JException { + XMLSlideShow xmlA = openPPTX("sample.pptx"); + @SuppressWarnings("resource") + OPCPackage pkg = xmlA.getPackage(); + + new XSLFPowerPointExtractor(xmlA).close(); new XSLFPowerPointExtractor(pkg).close(); - - XSLFPowerPointExtractor extractor = + + XSLFPowerPointExtractor extractor = new XSLFPowerPointExtractor(xmlA); extractor.getText(); - + String text = extractor.getText(); assertTrue(text.length() > 0); - + // Check Basics assertTrue(text.startsWith("Lorem ipsum dolor sit amet\n")); - assertTrue(text.contains("amet\n\n")); + assertContains(text, "amet\n\n"); // Our placeholder master text // This shouldn't show up in the output - String masterText = - "Click to edit Master title style\n" + - "Click to edit Master subtitle style\n" + - "\n\n\n\n\n\n" + - "Click to edit Master title style\n" + - "Click to edit Master text styles\n" + - "Second level\n" + - "Third level\n" + - "Fourth level\n" + - "Fifth level\n"; - + // String masterText = + // "Click to edit Master title style\n" + + // "Click to edit Master subtitle style\n" + + // "\n\n\n\n\n\n" + + // "Click to edit Master title style\n" + + // "Click to edit Master text styles\n" + + // "Second level\n" + + // "Third level\n" + + // "Fourth level\n" + + // "Fifth level\n"; + // Just slides, no notes text = extractor.getText(true, false, false); - assertEquals( - "Lorem ipsum dolor sit amet\n" + - "Nunc at risus vel erat tempus posuere. Aenean non ante.\n" + - "\n" + - "Lorem ipsum dolor sit amet\n" + - "Lorem\n" + - "ipsum\n" + - "dolor\n" + - "sit\n" + - "amet\n" + - "\n" - , text - ); - + String slideText = + "Lorem ipsum dolor sit amet\n" + + "Nunc at risus vel erat tempus posuere. Aenean non ante.\n" + + "\n" + + "Lorem ipsum dolor sit amet\n" + + "Lorem\n" + + "ipsum\n" + + "dolor\n" + + "sit\n" + + "amet\n" + + "\n"; + assertEquals(slideText, text); + // Just notes, no slides text = extractor.getText(false, true); - assertEquals( - "\n\n\n\n", text - ); - + assertEquals("\n\n\n\n", text); + // Both text = extractor.getText(true, true, false); - assertEquals( - "Lorem ipsum dolor sit amet\n" + - "Nunc at risus vel erat tempus posuere. Aenean non ante.\n" + + String bothText = + "Lorem ipsum dolor sit amet\n" + + "Nunc at risus vel erat tempus posuere. Aenean non ante.\n" + "\n\n\n" + - "Lorem ipsum dolor sit amet\n" + - "Lorem\n" + - "ipsum\n" + - "dolor\n" + - "sit\n" + - "amet\n" + - "\n\n\n" - , text - ); - + "Lorem ipsum dolor sit amet\n" + + "Lorem\n" + + "ipsum\n" + + "dolor\n" + + "sit\n" + + "amet\n" + + "\n\n\n"; + assertEquals(bothText, text); + // With Slides and Master Text - text = extractor.getText(true, false, true); - assertEquals( + text = extractor.getText(true, false, true); + String smText = "Lorem ipsum dolor sit amet\n" + "Nunc at risus vel erat tempus posuere. Aenean non ante.\n" + "\n" + @@ -123,13 +126,12 @@ public class TestXSLFPowerPointExtractor extends TestCase { "dolor\n" + "sit\n" + "amet\n" + - "\n" - , text - ); - + "\n"; + assertEquals(smText, text); + // With Slides, Notes and Master Text - text = extractor.getText(true, true, true); - assertEquals( + text = extractor.getText(true, true, true); + String snmText = "Lorem ipsum dolor sit amet\n" + "Nunc at risus vel erat tempus posuere. Aenean non ante.\n" + "\n" + @@ -140,67 +142,61 @@ public class TestXSLFPowerPointExtractor extends TestCase { "dolor\n" + "sit\n" + "amet\n" + - "\n\n\n" - , text - ); - + "\n\n\n"; + assertEquals(snmText, text); + // Via set defaults extractor.setSlidesByDefault(false); extractor.setNotesByDefault(true); text = extractor.getText(); - assertEquals( - "\n\n\n\n", text - ); - + assertEquals("\n\n\n\n", text); + extractor.close(); + xmlA.close(); } - - public void testGetComments() throws Exception { - XSLFSlideShow xml = - new XSLFSlideShow(OPCPackage.open(slTests.openResourceAsStream("45545_Comment.pptx"))); - XSLFPowerPointExtractor extractor = - new XSLFPowerPointExtractor(xml); - - String text = extractor.getText(); - assertTrue(text.length() > 0); - - // Check comments are there - assertTrue("Unable to find expected word in text\n" + text, text.contains("testdoc")); - assertTrue("Unable to find expected word in text\n" + text, text.contains("test phrase")); - - // Check the authors came through too - assertTrue("Unable to find expected word in text\n" + text, text.contains("XPVMWARE01")); - - extractor.close(); - } - + + public void testGetComments() throws IOException { + XMLSlideShow xml = openPPTX("45545_Comment.pptx"); + XSLFPowerPointExtractor extractor = new XSLFPowerPointExtractor(xml); + + String text = extractor.getText(); + assertTrue(text.length() > 0); + + // Check comments are there + assertContains(text, "testdoc"); + assertContains(text, "test phrase"); + + // Check the authors came through too + assertContains(text, "XPVMWARE01"); + + extractor.close(); + xml.close(); + } + public void testGetMasterText() throws Exception { - XSLFSlideShow xml = - new XSLFSlideShow(OPCPackage.open(slTests.openResourceAsStream("WithMaster.pptx"))); - XSLFPowerPointExtractor extractor = - new XSLFPowerPointExtractor(xml); - extractor.setSlidesByDefault(true); - extractor.setNotesByDefault(false); - extractor.setMasterByDefault(true); - - String text = extractor.getText(); - assertTrue(text.length() > 0); - - // Check master text is there - assertTrue("Unable to find expected word in text\n" + text, - text.contains("Footer from the master slide")); - - // Theme text shouldn't show up - String themeText = - "Theme Master Title\n" + - "Theme Master first level\n" + - "And the 2nd level\n" + - "Our 3rd level goes here\n" + - "And onto the 4th, such fun....\n" + - "Finally is the Fifth level\n"; - - // Check the whole text - assertEquals( + XMLSlideShow xml = openPPTX("WithMaster.pptx"); + XSLFPowerPointExtractor extractor = new XSLFPowerPointExtractor(xml); + extractor.setSlidesByDefault(true); + extractor.setNotesByDefault(false); + extractor.setMasterByDefault(true); + + String text = extractor.getText(); + assertTrue(text.length() > 0); + + // Check master text is there + assertContains(text, "Footer from the master slide"); + + // Theme text shouldn't show up + // String themeText = + // "Theme Master Title\n" + + // "Theme Master first level\n" + + // "And the 2nd level\n" + + // "Our 3rd level goes here\n" + + // "And onto the 4th, such fun....\n" + + // "Finally is the Fifth level\n"; + + // Check the whole text + String wholeText = "First page title\n" + "First page subtitle\n" + "This is the Master Title\n" + @@ -210,108 +206,124 @@ public class TestXSLFPowerPointExtractor extends TestCase { "2nd page subtitle\n" + "Footer from the master slide\n" + "This is the Master Title\n" + - "This text comes from the Master Slide\n" - , text - ); - + "This text comes from the Master Slide\n"; + assertEquals(wholeText, text); + extractor.close(); + xml.close(); } - public void testTable() throws Exception { - XSLFSlideShow xml = - new XSLFSlideShow(OPCPackage.open(slTests.openResourceAsStream("present1.pptx"))); - XSLFPowerPointExtractor extractor = - new XSLFPowerPointExtractor(xml); + @Test + public void testTable() throws Exception { + XMLSlideShow xml = openPPTX("present1.pptx"); + XSLFPowerPointExtractor extractor = new XSLFPowerPointExtractor(xml); String text = extractor.getText(); assertTrue(text.length() > 0); // Check comments are there assertTrue("Unable to find expected word in text\n" + text, text.contains("TEST")); - + extractor.close(); + xml.close(); } - + /** * Test that we can get the text from macro enabled, - * template, theme, slide enabled etc formats, as + * template, theme, slide enabled etc formats, as * well as from the normal file */ + @Test public void testDifferentSubformats() throws Exception { - String[] extensions = new String[] { - "pptx", "pptm", "ppsm", "ppsx", - "thmx", - //"xps" // Doesn't have a core document - }; - for(String extension : extensions) { - String filename = "testPPT." + extension; - XSLFSlideShow xml = - new XSLFSlideShow(OPCPackage.open(slTests.openResourceAsStream(filename))); - XSLFPowerPointExtractor extractor = - new XSLFPowerPointExtractor(xml); - - String text = extractor.getText(); - if(extension.equals("thmx")) { - // Theme file doesn't have any textual content - assertEquals(0, text.length()); - continue; - } - + String[] extensions = new String[] { + "pptx", "pptm", "ppsm", "ppsx", "thmx", + // "xps" - Doesn't have a core document + }; + for(String extension : extensions) { + String filename = "testPPT." + extension; + XMLSlideShow xml = openPPTX(filename); + XSLFPowerPointExtractor extractor = new XSLFPowerPointExtractor(xml); + + String text = extractor.getText(); + if (extension.equals("thmx")) { + // Theme file doesn't have any textual content + assertEquals(0, text.length()); + continue; + } + assertTrue(text.length() > 0); assertTrue( - "Text missing for " + filename + "\n" + text, + "Text missing for " + filename + "\n" + text, text.contains("Attachment Test") ); assertTrue( - "Text missing for " + filename + "\n" + text, + "Text missing for " + filename + "\n" + text, text.contains("This is a test file data with the same content") ); assertTrue( - "Text missing for " + filename + "\n" + text, + "Text missing for " + filename + "\n" + text, text.contains("content parsing") ); assertTrue( - "Text missing for " + filename + "\n" + text, + "Text missing for " + filename + "\n" + text, text.contains("Different words to test against") ); assertTrue( - "Text missing for " + filename + "\n" + text, + "Text missing for " + filename + "\n" + text, text.contains("Mystery") ); - + extractor.close(); + xml.close(); } } - public void test45541() throws Exception { - // extract text from a powerpoint that has a header in the notes-element - POITextExtractor extr = ExtractorFactory.createExtractor(slTests - .openResourceAsStream("45541_Header.pptx")); - String text = extr.getText(); - assertNotNull(text); - assertFalse("Had: " + text, text.contains("testdoc")); - - text = ((XSLFPowerPointExtractor)extr).getText(false, true); - assertNotNull(text); - assertTrue("Had: " + text, text.contains("testdoc")); - extr.close(); - assertNotNull(text); + @Test + public void test45541() throws Exception { + // extract text from a powerpoint that has a header in the notes-element + POITextExtractor extr = ExtractorFactory.createExtractor( + slTests.getFile("45541_Header.pptx")); + String text = extr.getText(); + assertNotNull(text); + assertFalse("Had: " + text, text.contains("testdoc")); - // extract text from a powerpoint that has a footer in the master-slide - extr = ExtractorFactory.createExtractor(slTests - .openResourceAsStream("45541_Footer.pptx")); - text = extr.getText(); - assertNotNull(text); - assertFalse("Had " + text, text.contains("testdoc")); - - text = ((XSLFPowerPointExtractor)extr).getText(false, true); + text = ((XSLFPowerPointExtractor)extr).getText(false, true); + assertContains(text, "testdoc"); + extr.close(); assertNotNull(text); - assertFalse("Had: " + text, text.contains("testdoc")); - text = ((XSLFPowerPointExtractor)extr).getText(false, false, true); - assertNotNull(text); - assertFalse("Had: " + text, text.contains("testdoc")); + // extract text from a powerpoint that has a footer in the master-slide + extr = ExtractorFactory.createExtractor( + slTests.getFile("45541_Footer.pptx")); + text = extr.getText(); + assertNotContained(text, "testdoc"); + + text = ((XSLFPowerPointExtractor)extr).getText(false, true); + assertNotContained(text, "testdoc"); - extr.close(); - } + text = ((XSLFPowerPointExtractor)extr).getText(false, false, true); + assertNotContained(text, "testdoc"); + + extr.close(); + } + + + @Test + public void bug54570() throws IOException { + XMLSlideShow xml = openPPTX("bug54570.pptx"); + XSLFPowerPointExtractor extractor = new XSLFPowerPointExtractor(xml); + String text = extractor.getText(); + assertNotNull(text); + extractor.close(); + xml.close(); + } + + private XMLSlideShow openPPTX(String file) throws IOException { + InputStream is = slTests.openResourceAsStream(file); + try { + return new XMLSlideShow(is); + } finally { + is.close(); + } + } } diff --git a/src/testcases/org/apache/poi/POITestCase.java b/src/testcases/org/apache/poi/POITestCase.java index ee9ab9ab3b..61e45833da 100644 --- a/src/testcases/org/apache/poi/POITestCase.java +++ b/src/testcases/org/apache/poi/POITestCase.java @@ -18,6 +18,7 @@ package org.apache.poi; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -26,73 +27,48 @@ import java.lang.reflect.Method; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; -import java.util.Collection; import java.util.Map; import org.apache.poi.util.SuppressForbidden; /** - * Parent class for POI JUnit TestCases, which provide additional - * features + * Util class for POI JUnit TestCases, which provide additional features */ -public class POITestCase { +public final class POITestCase { public static void assertContains(String haystack, String needle) { + assertNotNull(haystack); assertTrue( "Unable to find expected text '" + needle + "' in text:\n" + haystack, haystack.contains(needle) ); - } + } + public static void assertNotContained(String haystack, String needle) { + assertNotNull(haystack); assertFalse( "Unexpectedly found text '" + needle + "' in text:\n" + haystack, haystack.contains(needle) ); - } - - public static void assertContains(T needle, T[] haystack) - { - // Check - for (T thing : haystack) { - if (thing.equals(needle)) { - return; - } - } - - // Failed, try to build a nice error - StringBuilder sb = new StringBuilder(); - sb.append("Unable to find ").append(needle).append(" in ["); - for (T thing : haystack) { - sb.append(" ").append(thing.toString()).append(" ,"); - } - sb.setCharAt(sb.length()-1, ']'); - - fail(sb.toString()); - } + } - public static void assertContains(T needle, Collection haystack) { - if (haystack.contains(needle)) { - return; - } - fail("Unable to find " + needle + " in " + haystack); - } - - /** - * @param map haystack - * @param key needle - */ - public static void assertContains(Map map, T key) { - if (map.containsKey(key)) { + /** + * @param map haystack + * @param key needle + */ + public static void assertContains(Map map, T key) { + if (map.containsKey(key)) { return; - } - fail("Unable to find " + key + " in " + map); - } + } + fail("Unable to find " + key + " in " + map); + } - /** Utility method to get the value of a private/protected field. - * Only use this method in test cases!!! - */ - public static R getFieldValue(final Class clazz, final T instance, final Class fieldType, final String fieldName) { - assertTrue("Reflection of private fields is only allowed for POI classes.", clazz.getName().startsWith("org.apache.poi.")); - try { + /** + * Utility method to get the value of a private/protected field. + * Only use this method in test cases!!! + */ + public static R getFieldValue(final Class clazz, final T instance, final Class fieldType, final String fieldName) { + assertTrue("Reflection of private fields is only allowed for POI classes.", clazz.getName().startsWith("org.apache.poi.")); + try { return AccessController.doPrivileged(new PrivilegedExceptionAction() { @Override @SuppressWarnings("unchecked") @@ -103,18 +79,19 @@ public class POITestCase { return (R) f.get(instance); } }); - } catch (PrivilegedActionException pae) { - throw new RuntimeException("Cannot access field '" + fieldName + "' of class " + clazz, pae.getException()); - } - } + } catch (PrivilegedActionException pae) { + throw new RuntimeException("Cannot access field '" + fieldName + "' of class " + clazz, pae.getException()); + } + } - /** Utility method to call a private/protected method. - * Only use this method in test cases!!! - */ - public static R callMethod(final Class clazz, final T instance, final Class returnType, final String methodName, - final Class[] parameterTypes, final Object[] parameters) { - assertTrue("Reflection of private methods is only allowed for POI classes.", clazz.getName().startsWith("org.apache.poi.")); - try { + /** + * Utility method to call a private/protected method. + * Only use this method in test cases!!! + */ + public static R callMethod(final Class clazz, final T instance, final Class returnType, final String methodName, + final Class[] parameterTypes, final Object[] parameters) { + assertTrue("Reflection of private methods is only allowed for POI classes.", clazz.getName().startsWith("org.apache.poi.")); + try { return AccessController.doPrivileged(new PrivilegedExceptionAction() { @Override @SuppressWarnings("unchecked") @@ -125,8 +102,8 @@ public class POITestCase { return (R) m.invoke(instance, parameters); } }); - } catch (PrivilegedActionException pae) { - throw new RuntimeException("Cannot access method '" + methodName + "' of class " + clazz, pae.getException()); - } - } + } catch (PrivilegedActionException pae) { + throw new RuntimeException("Cannot access method '" + methodName + "' of class " + clazz, pae.getException()); + } + } } diff --git a/test-data/slideshow/bug54570.pptx b/test-data/slideshow/bug54570.pptx new file mode 100644 index 0000000000000000000000000000000000000000..a5547e9c5180f10fa870641bb355afaf288131ca GIT binary patch literal 50589 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 Wx-vc(u@C^b!H)pgPU%+c{`WsE`UWWg literal 0 HcmV?d00001 -- 2.39.5