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]

Reply via email to