From ddf71d0984e3a3d62f7287908e9ae19862c88d8f Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Tue, 6 Jan 2026 20:29:33 +0100 Subject: [PATCH] Avoid two NPEs which were currently "expected" in tests When things go wrong, we always want to give an explanation via an exception instead of an NPE. --- .../aggregates/FormulaRecordAggregate.java | 5 ++++- .../poi/hssf/usermodel/HSSFComment.java | 6 +++++- test-data/spreadsheet/stress.xls | Bin 73728 -> 73216 bytes 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/poi/src/main/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java b/poi/src/main/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java index 5ce1f62f68..f8fd855050 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java @@ -39,7 +39,7 @@ import org.apache.poi.util.RecordFormatException; public final class FormulaRecordAggregate extends RecordAggregate implements CellValueRecordInterface { private final FormulaRecord _formulaRecord; - private SharedValueManager _sharedValueManager; + private final SharedValueManager _sharedValueManager; /** caches the calculated result of the formula */ private StringRecord _stringRecord; private SharedFormulaRecord _sharedFormulaRecord; @@ -195,6 +195,9 @@ public final class FormulaRecordAggregate extends RecordAggregate implements Cel CellReference expRef = _formulaRecord.getFormula().getExpReference(); if (expRef != null) { ArrayRecord arec = _sharedValueManager.getArrayRecord(expRef.getRow(), expRef.getCol()); + if (arec == null) { + throw new IllegalStateException("Could not get ArrayRecord for cell-reference " + expRef.formatAsString()); + } return arec.getFormulaTokens(); } return _formulaRecord.getParsedExpression(); diff --git a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFComment.java b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFComment.java index af6ac8b4f2..fabfcaa33c 100644 --- a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFComment.java +++ b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFComment.java @@ -285,7 +285,11 @@ public class HSSFComment extends HSSFTextbox implements Comment { byte [] inSp = getEscherContainer().serialize(); spContainer.fillFields(inSp, 0, new DefaultEscherRecordFactory()); ObjRecord obj = (ObjRecord) getObjRecord().cloneViaReserialise(); - NoteRecord note = (NoteRecord) getNoteRecord().cloneViaReserialise(); + NoteRecord noteRecord = getNoteRecord(); + if (noteRecord == null) { + throw new IllegalStateException("Could not clone the note record for this comment because it is null"); + } + NoteRecord note = (NoteRecord) noteRecord.cloneViaReserialise(); return new HSSFComment(spContainer, obj, txo, note); } diff --git a/test-data/spreadsheet/stress.xls b/test-data/spreadsheet/stress.xls index aa42d4cdc8931487cdd5f62b07c11e961a8742cf..a3a5a5694a0e38ee39d3cd4014b730b0132349d5 100644 GIT binary patch delta 8646 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 delta 8961 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 Q^i!`^H8wm6r@qzx2NUF$1ONa4