diff options
Diffstat (limited to 'src/scratchpad')
3 files changed, 18 insertions, 6 deletions
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); |