aboutsummaryrefslogtreecommitdiffstats
path: root/poi
diff options
context:
space:
mode:
authorPJ Fanning <fanningpj@apache.org>2024-05-17 10:00:28 +0000
committerPJ Fanning <fanningpj@apache.org>2024-05-17 10:00:28 +0000
commitaf5d4b9f220f9a9e54dc87dc1a032424511104cc (patch)
treea4339122d6fb9ec21b4ef5821fd4eb75821db9da /poi
parent48305903b362ae9dc4afcf20aa02ac2d3649f4df (diff)
downloadpoi-af5d4b9f220f9a9e54dc87dc1a032424511104cc.tar.gz
poi-af5d4b9f220f9a9e54dc87dc1a032424511104cc.zip
[bug-69021] add guard around cast
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1917779 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poi')
-rw-r--r--poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java13
-rw-r--r--poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFSheetShiftRows.java21
2 files changed, 29 insertions, 5 deletions
diff --git a/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java b/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java
index a60fec9fd6..a536d74dd0 100644
--- a/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java
+++ b/poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java
@@ -1071,13 +1071,16 @@ public final class InternalWorkbook {
*
* Include in it ant code that modifies the workbook record stream and affects its size.
*/
- public void preSerialize(){
+ public void preSerialize() {
// Ensure we have enough tab IDs
// Can be a few short if new sheets were added
- if(records.getTabpos() > 0) {
- TabIdRecord tir = ( TabIdRecord ) records.get(records.getTabpos());
- if(tir.getTabIdSize() < boundsheets.size()) {
- fixTabIdRecord();
+ if (records.getTabpos() > 0) {
+ Record rec = records.get(records.getTabpos());
+ if (rec instanceof TabIdRecord) {
+ TabIdRecord tir = ( TabIdRecord ) rec;
+ if(tir.getTabIdSize() < boundsheets.size()) {
+ fixTabIdRecord();
+ }
}
}
}
diff --git a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFSheetShiftRows.java b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFSheetShiftRows.java
index 96273fe965..4a0ab65b73 100644
--- a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFSheetShiftRows.java
+++ b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFSheetShiftRows.java
@@ -18,11 +18,32 @@
package org.apache.poi.hssf.usermodel;
import org.apache.poi.hssf.HSSFITestDataProvider;
+import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.ss.usermodel.BaseTestSheetShiftRows;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
final class TestHSSFSheetShiftRows extends BaseTestSheetShiftRows {
public TestHSSFSheetShiftRows() {
super(HSSFITestDataProvider.instance);
}
+
+ @Test
+ public void testBug69021() throws IOException {
+ try (HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook("bug69021.xls")) {
+ Sheet sheet = workbook.getSheetAt(0);
+ int rowIndex = 2;
+ sheet.shiftRows(rowIndex, sheet.getLastRowNum(), 1);
+ Row row = sheet.createRow(rowIndex);
+ row.createCell(0).setCellValue("switch");
+ HSSFWorkbook wbBack = HSSFTestDataSamples.writeOutAndReadBack(workbook);
+ assertNotNull(wbBack);
+ }
+ }
}