You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ma...@apache.org on 2021/02/27 00:43:57 UTC
svn commit: r1886963 - in /poi/trunk/src:
java/org/apache/poi/hssf/model/InternalWorkbook.java
java/org/apache/poi/hssf/model/WorkbookRecordList.java
testcases/org/apache/poi/hssf/model/TestWorkbookRecordList.java
Author: mariusvolkhart
Date: Sat Feb 27 00:43:56 2021
New Revision: 1886963
URL: http://svn.apache.org/viewvc?rev=1886963&view=rev
Log:
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.
Added:
poi/trunk/src/testcases/org/apache/poi/hssf/model/TestWorkbookRecordList.java (with props)
Modified:
poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java
poi/trunk/src/java/org/apache/poi/hssf/model/WorkbookRecordList.java
Modified: poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java?rev=1886963&r1=1886962&r2=1886963&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java Sat Feb 27 00:43:56 2021
@@ -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() ];
Modified: poi/trunk/src/java/org/apache/poi/hssf/model/WorkbookRecordList.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/model/WorkbookRecordList.java?rev=1886963&r1=1886962&r2=1886963&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/model/WorkbookRecordList.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/model/WorkbookRecordList.java Sat Feb 27 00:43:56 2021
@@ -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 */
Added: poi/trunk/src/testcases/org/apache/poi/hssf/model/TestWorkbookRecordList.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/model/TestWorkbookRecordList.java?rev=1886963&view=auto
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/model/TestWorkbookRecordList.java (added)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/model/TestWorkbookRecordList.java Sat Feb 27 00:43:56 2021
@@ -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());
+ }
+ }
+}
Propchange: poi/trunk/src/testcases/org/apache/poi/hssf/model/TestWorkbookRecordList.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org