Author: centic Date: Mon Apr 22 13:32:30 2024 New Revision: 1917269 URL: http://svn.apache.org/viewvc?rev=1917269&view=rev Log: Bug 66425: Avoid exceptions found via poi-fuzz
Avoid a possible NullPointerException Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=67922 Added: poi/trunk/test-data/spreadsheet/clusterfuzz-testcase-minimized-POIHSSFFuzzer-5816431116615680.xls (with props) Modified: poi/trunk/poi/src/main/java/org/apache/poi/hpsf/DocumentSummaryInformation.java poi/trunk/poi/src/test/java/org/apache/poi/hpsf/extractor/TestHPSFPropertiesExtractor.java poi/trunk/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffViewer.java poi/trunk/poi/src/test/java/org/apache/poi/hssf/dev/TestRecordLister.java poi/trunk/test-data/spreadsheet/stress.xls Modified: poi/trunk/poi/src/main/java/org/apache/poi/hpsf/DocumentSummaryInformation.java URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/hpsf/DocumentSummaryInformation.java?rev=1917269&r1=1917268&r2=1917269&view=diff ============================================================================== --- poi/trunk/poi/src/main/java/org/apache/poi/hpsf/DocumentSummaryInformation.java (original) +++ poi/trunk/poi/src/main/java/org/apache/poi/hpsf/DocumentSummaryInformation.java Mon Apr 22 13:32:30 2024 @@ -767,7 +767,7 @@ public class DocumentSummaryInformation final long id = p.getID(); if (id == PropertyIDMap.PID_CODEPAGE) { cps.setCodepage((Integer)p.getValue()); - } else if (id > PropertyIDMap.PID_CODEPAGE) { + } else if (id > PropertyIDMap.PID_CODEPAGE && dictionary != null) { propertyCount++; final CustomProperty cp = new CustomProperty(p, dictionary.get(id)); cps.put(cp.getName(), cp); Modified: poi/trunk/poi/src/test/java/org/apache/poi/hpsf/extractor/TestHPSFPropertiesExtractor.java URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/hpsf/extractor/TestHPSFPropertiesExtractor.java?rev=1917269&r1=1917268&r2=1917269&view=diff ============================================================================== --- poi/trunk/poi/src/test/java/org/apache/poi/hpsf/extractor/TestHPSFPropertiesExtractor.java (original) +++ poi/trunk/poi/src/test/java/org/apache/poi/hpsf/extractor/TestHPSFPropertiesExtractor.java Mon Apr 22 13:32:30 2024 @@ -17,14 +17,11 @@ package org.apache.poi.hpsf.extractor; -import static org.apache.poi.POITestCase.assertContains; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import java.io.IOException; -import java.io.InputStream; - +import org.apache.commons.io.FileUtils; import org.apache.poi.POIDataSamples; +import org.apache.poi.extractor.ExtractorFactory; +import org.apache.poi.extractor.POIOLE2TextExtractor; +import org.apache.poi.extractor.POITextExtractor; import org.apache.poi.hpsf.Thumbnail; import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.extractor.ExcelExtractor; @@ -32,6 +29,15 @@ import org.apache.poi.hssf.usermodel.HSS import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.junit.jupiter.api.Test; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +import static org.apache.poi.POITestCase.assertContains; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; + final class TestHPSFPropertiesExtractor { private static final POIDataSamples _samples = POIDataSamples.getHPSFInstance(); @@ -179,4 +185,23 @@ final class TestHPSFPropertiesExtractor assertContains(ext.getText(), "PID_CODEPAGE = 1252"); } } + + @Test + void testNPE() throws IOException { + final byte[] bytes = FileUtils.readFileToByteArray( + POIDataSamples.getSpreadSheetInstance().getFile( + "clusterfuzz-testcase-minimized-POIHSSFFuzzer-5816431116615680.xls")); + try (POITextExtractor extractor = ExtractorFactory.createExtractor(new ByteArrayInputStream(bytes))) { + assertInstanceOf(POIOLE2TextExtractor.class, extractor); + + POIOLE2TextExtractor ole2Extractor = (POIOLE2TextExtractor) extractor; + + POITextExtractor[] embedded = ExtractorFactory.getEmbeddedDocsTextExtractors(ole2Extractor); + assertEquals(1, embedded.length); + for (POITextExtractor poiTextExtractor : embedded) { + POITextExtractor metaData = poiTextExtractor.getMetadataTextExtractor(); + metaData.getText(); + } + } + } } Modified: poi/trunk/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffViewer.java URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffViewer.java?rev=1917269&r1=1917268&r2=1917269&view=diff ============================================================================== --- poi/trunk/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffViewer.java (original) +++ poi/trunk/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffViewer.java Mon Apr 22 13:32:30 2024 @@ -47,6 +47,7 @@ class TestBiffViewer extends BaseTestIte excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5175219985448960.xls", IndexOutOfBoundsException.class); excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-6137883240824832.xls", IndexOutOfBoundsException.class); excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-6483562584932352.xls", IndexOutOfBoundsException.class); + excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5816431116615680.xls", RecordFormatException.class); return excludes; } Modified: poi/trunk/poi/src/test/java/org/apache/poi/hssf/dev/TestRecordLister.java URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/hssf/dev/TestRecordLister.java?rev=1917269&r1=1917268&r2=1917269&view=diff ============================================================================== --- poi/trunk/poi/src/test/java/org/apache/poi/hssf/dev/TestRecordLister.java (original) +++ poi/trunk/poi/src/test/java/org/apache/poi/hssf/dev/TestRecordLister.java Mon Apr 22 13:32:30 2024 @@ -50,6 +50,7 @@ class TestRecordLister extends BaseTestI excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5175219985448960.xls", RecordFormatException.class); excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-6137883240824832.xls", RecordFormatException.class); excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-6483562584932352.xls", RecordFormatException.class); + excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5816431116615680.xls", RecordFormatException.class); return excludes; } Added: poi/trunk/test-data/spreadsheet/clusterfuzz-testcase-minimized-POIHSSFFuzzer-5816431116615680.xls URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/clusterfuzz-testcase-minimized-POIHSSFFuzzer-5816431116615680.xls?rev=1917269&view=auto ============================================================================== Binary file - no diff available. Propchange: poi/trunk/test-data/spreadsheet/clusterfuzz-testcase-minimized-POIHSSFFuzzer-5816431116615680.xls ------------------------------------------------------------------------------ svn:mime-type = application/vnd.ms-excel Modified: poi/trunk/test-data/spreadsheet/stress.xls URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/stress.xls?rev=1917269&r1=1917268&r2=1917269&view=diff ============================================================================== Binary files - no diff available. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
