mirror of https://github.com/apache/poi.git
Fix bug with record indexes for HSSF Workbooks
We have encountered workbooks that do not have a TabIdRecord (see 55982.xls). However, the WorkbookRecordList#updateRecordPos() method would still increment the position of the TabIdRecord for such workbooks. Changing the default position of the record from 0 to -1 indicates that the record position has now been set. This bug was discovered while adding support for editing pictures in HSSF documents. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1886963 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
451684aa91
commit
50757bca8e
|
@ -776,7 +776,6 @@ public final class InternalWorkbook {
|
|||
* make the tabid record look like the current situation.
|
||||
*/
|
||||
private void fixTabIdRecord() {
|
||||
Record rec = records.get(records.getTabpos());
|
||||
|
||||
// see bug 55982, quite a number of documents do not have a TabIdRecord and
|
||||
// thus there is no way to do the fixup here,
|
||||
|
@ -785,6 +784,8 @@ public final class InternalWorkbook {
|
|||
return;
|
||||
}
|
||||
|
||||
Record rec = records.get(records.getTabpos());
|
||||
|
||||
TabIdRecord tir = ( TabIdRecord ) rec;
|
||||
short[] tia = new short[ boundsheets.size() ];
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ public final class WorkbookRecordList {
|
|||
/** holds the position of the last bound sheet */
|
||||
private int bspos;
|
||||
/** holds the position of the tabid record */
|
||||
private int tabpos;
|
||||
private int tabpos = -1;
|
||||
/** hold the position of the last font record */
|
||||
private int fontpos;
|
||||
/** hold the position of the last extended font record */
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
package org.apache.poi.hssf.model;
|
||||
|
||||
import org.apache.poi.hssf.record.chart.ChartRecord;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.apache.poi.hssf.HSSFTestDataSamples.openSampleWorkbook;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class TestWorkbookRecordList {
|
||||
|
||||
@Test
|
||||
public void tabposIsOnlyUpdatedIfWorkbookHasTabIdRecord() throws IOException {
|
||||
try (HSSFWorkbook wb = openSampleWorkbook("55982.xls")) {
|
||||
WorkbookRecordList records = wb.getInternalWorkbook().getWorkbookRecordList();
|
||||
assertEquals(-1, records.getTabpos());
|
||||
|
||||
// Add an arbitrary record to the front of the list
|
||||
records.add(0, new ChartRecord());
|
||||
|
||||
assertEquals(-1, records.getTabpos());
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue