diff options
-rw-r--r-- | src/integrationtest/org/apache/poi/TestAllFiles.java | 1 | ||||
-rw-r--r-- | src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java | 2 | ||||
-rw-r--r-- | src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java | 4 | ||||
-rw-r--r-- | src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java | 1 | ||||
-rw-r--r-- | src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java | 19 | ||||
-rw-r--r-- | test-data/slideshow/keyframes.pptx (renamed from test-data/slideshow/keyframes.ppt) | bin | 389330 -> 389330 bytes |
6 files changed, 20 insertions, 7 deletions
diff --git a/src/integrationtest/org/apache/poi/TestAllFiles.java b/src/integrationtest/org/apache/poi/TestAllFiles.java index 61c47b9e88..40f19f9c85 100644 --- a/src/integrationtest/org/apache/poi/TestAllFiles.java +++ b/src/integrationtest/org/apache/poi/TestAllFiles.java @@ -289,6 +289,7 @@ public class TestAllFiles { "document/Bug50955.doc", "document/57843.doc", "slideshow/PPT95.ppt", + "slideshow/pp40only.ppt", "slideshow/Divino_Revelado.pptx", "openxml4j/OPCCompliance_CoreProperties_DCTermsNamespaceLimitedUseFAIL.docx", "openxml4j/OPCCompliance_CoreProperties_DoNotUseCompatibilityMarkupFAIL.docx", diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java index 6e27599729..199a9f6286 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java @@ -47,7 +47,7 @@ public class TestPPTX2PNG { private static final POIDataSamples samples = POIDataSamples.getSlideShowInstance(); private static final File basedir = null; private static final String files = - "53446.ppt, alterman_security.ppt, alterman_security.pptx, KEY02.pptx, themes.pptx, backgrounds.pptx, layouts.pptx, sample.pptx, shapes.pptx, 54880_chinese.ppt, keyframes.ppt"; + "53446.ppt, alterman_security.ppt, alterman_security.pptx, KEY02.pptx, themes.pptx, backgrounds.pptx, layouts.pptx, sample.pptx, shapes.pptx, 54880_chinese.ppt, keyframes.pptx"; diff --git a/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java b/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java index cedfbb0470..26ba59d2c6 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java +++ b/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java @@ -20,6 +20,8 @@ package org.apache.poi.hslf.record; +import static org.apache.poi.hslf.usermodel.HSLFSlideShow.PP95_DOCUMENT; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -143,7 +145,7 @@ public class CurrentUserAtom // See how long it is. If it's under 28 bytes long, we can't // read it if(_contents.length < 28) { - boolean isPP95 = dir.hasEntry("PP40"); + boolean isPP95 = dir.hasEntry(PP95_DOCUMENT); // PPT95 has 4 byte size, then data if (!isPP95 && _contents.length >= 4) { int size = LittleEndian.getInt(_contents); diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java index ecc360e135..2f0a116d68 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java @@ -71,6 +71,7 @@ public final class HSLFSlideShow implements SlideShow<HSLFShape,HSLFTextParagrap /** Powerpoint document entry/stream name */ public static final String POWERPOINT_DOCUMENT = "PowerPoint Document"; + public static final String PP95_DOCUMENT = "PP40"; enum LoadSavePhase { INIT, LOADED diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java index 6f00755a3d..420ae47484 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java @@ -17,6 +17,9 @@ package org.apache.poi.hslf.usermodel; +import static org.apache.poi.hslf.usermodel.HSLFSlideShow.POWERPOINT_DOCUMENT; +import static org.apache.poi.hslf.usermodel.HSLFSlideShow.PP95_DOCUMENT; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.Closeable; @@ -35,6 +38,7 @@ import java.util.TreeMap; import org.apache.poi.POIDocument; import org.apache.poi.hslf.exceptions.CorruptPowerPointFileException; import org.apache.poi.hslf.exceptions.HSLFException; +import org.apache.poi.hslf.exceptions.OldPowerPointFormatException; import org.apache.poi.hslf.record.CurrentUserAtom; import org.apache.poi.hslf.record.DocumentEncryptionAtom; import org.apache.poi.hslf.record.ExOleObjStg; @@ -183,13 +187,18 @@ public final class HSLFSlideShowImpl extends POIDocument implements Closeable { * @throws IOException when the powerpoint can't be read */ private void readPowerPointStream() throws IOException { + final DirectoryNode dir = getDirectory(); + + if (!dir.hasEntry(POWERPOINT_DOCUMENT) && dir.hasEntry(PP95_DOCUMENT)) { + throw new OldPowerPointFormatException("You seem to have supplied a PowerPoint95 file, which isn't supported"); + } + // Get the main document stream - DocumentEntry docProps = - (DocumentEntry) getDirectory().getEntry(HSLFSlideShow.POWERPOINT_DOCUMENT); + DocumentEntry docProps = (DocumentEntry)dir.getEntry(POWERPOINT_DOCUMENT); // Grab the document stream int len = docProps.getSize(); - try (InputStream is = getDirectory().createDocumentInputStream(HSLFSlideShow.POWERPOINT_DOCUMENT)) { + try (InputStream is = dir.createDocumentInputStream(docProps)) { _docstream = IOUtils.toByteArray(is, len); } } @@ -665,8 +674,8 @@ public final class HSLFSlideShowImpl extends POIDocument implements Closeable { // Write the PPT stream into the POIFS layer ByteArrayInputStream bais = new ByteArrayInputStream(_docstream); - outFS.createOrUpdateDocument(bais, HSLFSlideShow.POWERPOINT_DOCUMENT); - writtenEntries.add(HSLFSlideShow.POWERPOINT_DOCUMENT); + outFS.createOrUpdateDocument(bais, POWERPOINT_DOCUMENT); + writtenEntries.add(POWERPOINT_DOCUMENT); currentUser.setEncrypted(encryptedSS.getDocumentEncryptionAtom() != null); currentUser.writeToFS(outFS); diff --git a/test-data/slideshow/keyframes.ppt b/test-data/slideshow/keyframes.pptx Binary files differindex e653d6465b..e653d6465b 100644 --- a/test-data/slideshow/keyframes.ppt +++ b/test-data/slideshow/keyframes.pptx |