aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2011-05-27 11:45:50 +0000
committerNick Burch <nick@apache.org>2011-05-27 11:45:50 +0000
commit044c992853a25bf64f5a43453c136a660cc02ff2 (patch)
treef9ab8969afdc5a34f5ab49e16a406577baddb563
parent67d2e1f6b06c15141b6625d345568d4979d558aa (diff)
downloadpoi-044c992853a25bf64f5a43453c136a660cc02ff2.tar.gz
poi-044c992853a25bf64f5a43453c136a660cc02ff2.zip
Fix bug #51273 - Hash codes can be negative when working on our own low memory hash for formula cell evaluation
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1128268 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/documentation/content/xdocs/status.xml1
-rw-r--r--src/java/org/apache/poi/ss/formula/FormulaCellCacheEntrySet.java5
2 files changed, 3 insertions, 3 deletions
diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml
index c0790c9f33..5da84b934b 100644
--- a/src/documentation/content/xdocs/status.xml
+++ b/src/documentation/content/xdocs/status.xml
@@ -34,6 +34,7 @@
<changes>
<release version="3.8-beta3" date="2011-??-??">
+ <action dev="poi-developers" type="fix">51273 - Formula Value Cache fix for repeated evaluations</action>
<action dev="poi-developers" type="add">51171 - Improved performance of SharedValueManager </action>
<action dev="poi-developers" type="fix">51236 - XSSF set colour support for black/white to match getter</action>
<action dev="poi-developers" type="add">51196 - Initial support for Spreadsheet Chart API</action>
diff --git a/src/java/org/apache/poi/ss/formula/FormulaCellCacheEntrySet.java b/src/java/org/apache/poi/ss/formula/FormulaCellCacheEntrySet.java
index d8e573150e..9a40cbc95e 100644
--- a/src/java/org/apache/poi/ss/formula/FormulaCellCacheEntrySet.java
+++ b/src/java/org/apache/poi/ss/formula/FormulaCellCacheEntrySet.java
@@ -76,8 +76,7 @@ final class FormulaCellCacheEntrySet {
private static boolean addInternal(CellCacheEntry[] arr, CellCacheEntry cce) {
-
- int startIx = cce.hashCode() % arr.length;
+ int startIx = Math.abs(cce.hashCode() % arr.length);
for(int i=startIx; i<arr.length; i++) {
CellCacheEntry item = arr[i];
@@ -130,7 +129,7 @@ final class FormulaCellCacheEntrySet {
// else - usual case
// delete single element (without re-hashing)
- int startIx = cce.hashCode() % arr.length;
+ int startIx = Math.abs(cce.hashCode() % arr.length);
// note - can't exit loops upon finding null because of potential previous deletes
for(int i=startIx; i<arr.length; i++) {