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
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 { | |||||
try (InputStream stream = new FileInputStream(file)) { | |||||
handleFile(stream, file.getPath()); | handleFile(stream, file.getPath()); | ||||
} finally { | |||||
stream.close(); | |||||
} | } | ||||
handleExtracting(file); | handleExtracting(file); | ||||
stream = new FileInputStream(file); | |||||
try { | |||||
try (InputStream stream = new FileInputStream(file)) { | |||||
try (PublisherTextExtractor extractor = new PublisherTextExtractor(stream)) { | try (PublisherTextExtractor extractor = new PublisherTextExtractor(stream)) { | ||||
assertNotNull(extractor.getText()); | assertNotNull(extractor.getText()); | ||||
} | } | ||||
} finally { | |||||
stream.close(); | |||||
} | } | ||||
} | } | ||||
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; | ||||
/** | /** | ||||
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); |