mirror of https://github.com/apache/poi.git
Bug 66425: Avoid a ClassCastException found via oss-fuzz
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-ffa450edef68
This commit is contained in:
parent
acf61f325f
commit
57d746827f
|
@ -45,22 +45,16 @@ public class HPBFFileHandler extends POIFSFileHandler {
|
||||||
void test() throws Exception {
|
void test() throws Exception {
|
||||||
File file = new File("test-data/publisher/SampleBrochure.pub");
|
File file = new File("test-data/publisher/SampleBrochure.pub");
|
||||||
|
|
||||||
InputStream stream = new FileInputStream(file);
|
try (InputStream stream = new FileInputStream(file)) {
|
||||||
try {
|
|
||||||
handleFile(stream, file.getPath());
|
handleFile(stream, file.getPath());
|
||||||
} finally {
|
|
||||||
stream.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handleExtracting(file);
|
handleExtracting(file);
|
||||||
|
|
||||||
stream = new FileInputStream(file);
|
try (InputStream stream = new FileInputStream(file)) {
|
||||||
try {
|
|
||||||
try (PublisherTextExtractor extractor = new PublisherTextExtractor(stream)) {
|
try (PublisherTextExtractor extractor = new PublisherTextExtractor(stream)) {
|
||||||
assertNotNull(extractor.getText());
|
assertNotNull(extractor.getText());
|
||||||
}
|
}
|
||||||
} finally {
|
|
||||||
stream.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.io.InputStream;
|
||||||
|
|
||||||
import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
|
import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
|
||||||
import org.apache.poi.poifs.filesystem.DirectoryNode;
|
import org.apache.poi.poifs.filesystem.DirectoryNode;
|
||||||
|
import org.apache.poi.poifs.filesystem.Entry;
|
||||||
import org.apache.poi.util.IOUtils;
|
import org.apache.poi.util.IOUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -57,7 +58,11 @@ public abstract class HPBFPart {
|
||||||
DirectoryNode dir = baseDir;
|
DirectoryNode dir = baseDir;
|
||||||
for(int i=0; i<path.length-1; i++) {
|
for(int i=0; i<path.length-1; i++) {
|
||||||
try {
|
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) {
|
} catch (FileNotFoundException e) {
|
||||||
throw new IllegalArgumentException("File invalid - failed to find directory entry '"
|
throw new IllegalArgumentException("File invalid - failed to find directory entry '"
|
||||||
+ path[i] + "': " + e);
|
+ path[i] + "': " + e);
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue