]> source.dussan.org Git - poi.git/commitdiff
CaseInsensitiveMap is not thread-safe
authorPJ Fanning <fanningpj@apache.org>
Thu, 4 Nov 2021 18:30:31 +0000 (18:30 +0000)
committerPJ Fanning <fanningpj@apache.org>
Thu, 4 Nov 2021 18:30:31 +0000 (18:30 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894738 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/BaseXSSFEvaluationWorkbook.java
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTable.java

index c2c1f06cd26b1fe8ccc61dd835f9d4cb88ffef8c..c1b5eb104213aed0dc4efa9c89cff480ae329272 100644 (file)
@@ -19,8 +19,8 @@ package org.apache.poi.xssf.usermodel;
 
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentSkipListMap;
 
-import org.apache.commons.collections4.map.CaseInsensitiveMap;
 import org.apache.poi.ss.SpreadsheetVersion;
 import org.apache.poi.ss.formula.EvaluationName;
 import org.apache.poi.ss.formula.EvaluationWorkbook;
@@ -364,7 +364,7 @@ public abstract class BaseXSSFEvaluationWorkbook implements FormulaRenderingWork
         if ( _tableCache != null ) {
             return _tableCache;
         }
-        _tableCache = new CaseInsensitiveMap<>();
+        _tableCache = new ConcurrentSkipListMap<>(String.CASE_INSENSITIVE_ORDER);
 
         for (Sheet sheet : _uBook) {
             for (XSSFTable tbl : ((XSSFSheet)sheet).getTables()) {
index 39f45df8e357a2095d713cd8450a094790a1234e..fbba2f697a59b0064fdfd0984a76af368d5f68e5 100644 (file)
@@ -26,8 +26,8 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.ConcurrentSkipListMap;
 
-import org.apache.commons.collections4.map.CaseInsensitiveMap;
 import org.apache.poi.ooxml.POIXMLDocumentPart;
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.ss.SpreadsheetVersion;
@@ -59,7 +59,7 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
     private CTTable ctTable;
     private transient List<XSSFXmlColumnPr> xmlColumnPrs;
     private transient List<XSSFTableColumn> tableColumns;
-    private transient CaseInsensitiveMap<String, Integer> columnMap;
+    private transient ConcurrentSkipListMap<String, Integer> columnMap;
     private transient CellReference startCellReference;
     private transient CellReference endCellReference;
     private transient String commonXPath;
@@ -831,8 +831,7 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
     public int findColumnIndex(String columnHeader) {
         if (columnHeader == null) return -1;
         if (columnMap == null) {
-            final int count = getColumnCount();
-            columnMap = new CaseInsensitiveMap<>(count * 3 / 2);
+            columnMap = new ConcurrentSkipListMap<>(String.CASE_INSENSITIVE_ORDER);
 
             int i = 0;
             for (XSSFTableColumn column : getColumns()) {