diff --git a/src/java/org/apache/poi/ss/formula/CollaboratingWorkbooksEnvironment.java b/src/java/org/apache/poi/ss/formula/CollaboratingWorkbooksEnvironment.java
index f2d936f3d..58ce3d929 100644
--- a/src/java/org/apache/poi/ss/formula/CollaboratingWorkbooksEnvironment.java
+++ b/src/java/org/apache/poi/ss/formula/CollaboratingWorkbooksEnvironment.java
@@ -117,7 +117,7 @@ public final class CollaboratingWorkbooksEnvironment {
unhookOldEnvironments(evaluators);
hookNewEnvironment(evaluators, this);
_unhooked = false;
- _evaluators = evaluators;
+ _evaluators = evaluators.clone();
_evaluatorsByName = evaluatorsByName;
}
diff --git a/src/java/org/apache/poi/ss/formula/Formula.java b/src/java/org/apache/poi/ss/formula/Formula.java
index 48c7f391b..9f4f25e90 100644
--- a/src/java/org/apache/poi/ss/formula/Formula.java
+++ b/src/java/org/apache/poi/ss/formula/Formula.java
@@ -42,7 +42,7 @@ public class Formula {
private final int _encodedTokenLen;
private Formula(byte[] byteEncoding, int encodedTokenLen) {
- _byteEncoding = byteEncoding;
+ _byteEncoding = byteEncoding.clone();
_encodedTokenLen = encodedTokenLen;
// if (false) { // set to true to eagerly check Ptg decoding
// LittleEndianByteArrayInputStream in = new LittleEndianByteArrayInputStream(byteEncoding);
diff --git a/src/java/org/apache/poi/ss/formula/FormulaCellCacheEntry.java b/src/java/org/apache/poi/ss/formula/FormulaCellCacheEntry.java
index 2d399494a..056195618 100644
--- a/src/java/org/apache/poi/ss/formula/FormulaCellCacheEntry.java
+++ b/src/java/org/apache/poi/ss/formula/FormulaCellCacheEntry.java
@@ -27,8 +27,6 @@ import org.apache.poi.ss.formula.FormulaUsedBlankCellSet.BookSheetKey;
/**
* Stores the cached result of a formula evaluation, along with the set of sensitive input cells
- *
- * @author Josh Micich
*/
final class FormulaCellCacheEntry extends CellCacheEntry {
@@ -57,8 +55,13 @@ final class FormulaCellCacheEntry extends CellCacheEntry {
public void setSensitiveInputCells(CellCacheEntry[] sensitiveInputCells) {
// need to tell all cells that were previously used, but no longer are,
// that they are not consumed by this cell any more
- changeConsumingCells(sensitiveInputCells == null ? CellCacheEntry.EMPTY_ARRAY : sensitiveInputCells);
- _sensitiveInputCells = sensitiveInputCells;
+ if (sensitiveInputCells == null) {
+ _sensitiveInputCells = null;
+ changeConsumingCells(CellCacheEntry.EMPTY_ARRAY);
+ } else {
+ _sensitiveInputCells = sensitiveInputCells.clone();
+ changeConsumingCells(_sensitiveInputCells);
+ }
}
public void clearFormulaEntry() {
diff --git a/src/java/org/apache/poi/ss/formula/ParseNode.java b/src/java/org/apache/poi/ss/formula/ParseNode.java
index a671ede59..a41ec2634 100644
--- a/src/java/org/apache/poi/ss/formula/ParseNode.java
+++ b/src/java/org/apache/poi/ss/formula/ParseNode.java
@@ -28,8 +28,6 @@ import org.apache.poi.ss.formula.function.FunctionMetadataRegistry;
* Represents a syntactic element from a formula by encapsulating the corresponding Ptg
* token. Each ParseNode may have child ParseNodes in the case when the wrapped
* Ptg is non-atomic.
- *
- * @author Josh Micich
*/
final class ParseNode {
@@ -44,7 +42,7 @@ final class ParseNode {
throw new IllegalArgumentException("token must not be null");
}
_token = token;
- _children = children;
+ _children = children.clone();
_isIf = isIf(token);
int tokenCount = 1;
for (int i = 0; i < children.length; i++) {