We try to avoid throwing ClassCastException but it was possible to trigger one here with a specially crafted input-file Should fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=61162 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1911459 13f79535-47bb-0310-9956-ffa450edef68tags/REL_5_2_4
@@ -45,22 +45,16 @@ public class HPBFFileHandler extends POIFSFileHandler { | |||
void test() throws Exception { | |||
File file = new File("test-data/publisher/SampleBrochure.pub"); | |||
InputStream stream = new FileInputStream(file); | |||
try { | |||
try (InputStream stream = new FileInputStream(file)) { | |||
handleFile(stream, file.getPath()); | |||
} finally { | |||
stream.close(); | |||
} | |||
handleExtracting(file); | |||
stream = new FileInputStream(file); | |||
try { | |||
try (InputStream stream = new FileInputStream(file)) { | |||
try (PublisherTextExtractor extractor = new PublisherTextExtractor(stream)) { | |||
assertNotNull(extractor.getText()); | |||
} | |||
} finally { | |||
stream.close(); | |||
} | |||
} | |||
@@ -23,6 +23,7 @@ import java.io.InputStream; | |||
import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream; | |||
import org.apache.poi.poifs.filesystem.DirectoryNode; | |||
import org.apache.poi.poifs.filesystem.Entry; | |||
import org.apache.poi.util.IOUtils; | |||
/** | |||
@@ -57,7 +58,11 @@ public abstract class HPBFPart { | |||
DirectoryNode dir = baseDir; | |||
for(int i=0; i<path.length-1; i++) { | |||
try { | |||
dir = (DirectoryNode)dir.getEntry(path[i]); | |||
Entry entry = dir.getEntry(path[i]); | |||
if (!(entry instanceof DirectoryNode)) { | |||
throw new IllegalArgumentException("Had unexpected type of entry for path: " + path[i] + ": " + entry); | |||
} | |||
dir = (DirectoryNode) entry; | |||
} catch (FileNotFoundException e) { | |||
throw new IllegalArgumentException("File invalid - failed to find directory entry '" | |||
+ path[i] + "': " + e); |