Bug 64721

Summary: NullPointerException occurs when calling getDataSize() of an object created with ExtRst.copy()
Product: POI Reporter: Kwon Ohyoung <wizlong79>
Component: HSSFAssignee: POI Developers List <dev>
Status: RESOLVED FIXED    
Severity: critical CC: wizlong79
Priority: P2    
Version: 4.1.2-FINAL   
Target Milestone: ---   
Hardware: All   
OS: All   
Attachments: Patch for this error

Description Kwon Ohyoung 2020-09-08 11:07:26 UTC
Class: org.apache.poi.hssf.record.common.ExtRst
Method: getDataSize()

Null Pointer Property: extraData

I am developing excel export function using Jxls 2.8.1 and jxls-poi 2.8.1, poi 4.1.2 version.

The export function for xlsx was created first and is working fine.

During testing because the export function for xls was also needed, I found that a NullPointerException occurred during the write process.

As a result of tracking the location of the error using the Debugger, when executing ExtRst.getDataSize(), a NullPointerException occurred in the extraData.length part and reported.

This error is caused by leaving extraData null in ExtRst.copy() which is called when org.apache.poi.hssf.record.common.UnicodeString.copy() is called.

I can't afford to wait for the patch to complete, so I'm going to use version 4.1.1 without the ExtRst class.
Comment 1 Kwon Ohyoung 2020-09-09 06:21:47 UTC
Created attachment 37437 [details]
Patch for this error

As a result of checking the version 4.1.1 and below, I confirmed that ExtRst exists as an inner class of UnicodeString, but there is no same problem.

In the process of separating ExtRst into an independent class and replacing clone() with copy(), the process of initializing populateEmpty() seems to be missing.

Uploaded Patch: (from: /tags/REL_4_1_2)
   -Modify to call this() in copy constructor ExtRst(ExtRst other)
   -Add test case to detect this NullPointerException case
Comment 2 PJ Fanning 2020-09-09 08:43:19 UTC
thanks - merged with https://github.com/apache/poi/commit/6c7bf59087e720a663fc5aec7ec5b2d502d7accd