You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by on...@apache.org on 2017/11/07 07:21:24 UTC
svn commit: r1814461 - in /poi/trunk/src:
java/org/apache/poi/ss/util/CellRangeAddressBase.java
testcases/org/apache/poi/ss/util/TestCellRangeUtil.java
Author: onealj
Date: Tue Nov 7 07:21:24 2017
New Revision: 1814461
URL: http://svn.apache.org/viewvc?rev=1814461&view=rev
Log:
bug 61730: remove CellRangeAddressBase which is eager. The lazy iterator is safer, less likely to cause an OOM/DoS.
Modified:
poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java
poi/trunk/src/testcases/org/apache/poi/ss/util/TestCellRangeUtil.java
Modified: poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java?rev=1814461&r1=1814460&r2=1814461&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java Tue Nov 7 07:21:24 2017
@@ -282,26 +282,7 @@ public abstract class CellRangeAddressBa
public int getNumberOfCells() {
return (_lastRow - _firstRow + 1) * (_lastCol - _firstCol + 1);
}
-
- public List<CellAddress> getCellAddresses(boolean rowMajorOrder) {
- List<CellAddress> addresses = new ArrayList<>();
- if (rowMajorOrder) {
- for (int r = _firstRow; r <= _lastRow; r++) {
- for (int c = _firstCol; c <= _lastCol; c++) {
- addresses.add(new CellAddress(r, c));
- }
- }
- }
- else {
- for (int c = _firstCol; c <= _lastCol; c++) {
- for (int r = _firstRow; r <= _lastRow; r++) {
- addresses.add(new CellAddress(r, c));
- }
- }
- }
- return Collections.unmodifiableList(addresses);
- }
-
+
/**
* Returns an iterator over the CellAddresses in this cell range in row-major order.
* @since POI 4.0.0
Modified: poi/trunk/src/testcases/org/apache/poi/ss/util/TestCellRangeUtil.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/util/TestCellRangeUtil.java?rev=1814461&r1=1814460&r2=1814461&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/util/TestCellRangeUtil.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/util/TestCellRangeUtil.java Tue Nov 7 07:21:24 2017
@@ -21,6 +21,10 @@ import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assume.assumeTrue;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Iterator;
+import org.apache.commons.collections4.IteratorUtils;
/**
* Tests CellRangeUtil.
@@ -47,23 +51,40 @@ public final class TestCellRangeUtil {
// A B
// 1 x x A1,A2,B1,B2 --> A1:B2
// 2 x x
- assertArrayEquals(asArray(A1_B2), merge(A1, B1, A2, B2));
- assertArrayEquals(asArray(A1_B2), merge(A1, B2, A2, B1));
+ assertCellRangesEqual(asArray(A1_B2), merge(A1, B1, A2, B2));
+ assertCellRangesEqual(asArray(A1_B2), merge(A1, B2, A2, B1));
// Partially mergeable: multiple possible mergings
// A B
// 1 x x A1,A2,B1 --> A1:B1,A2 or A1:A2,B1
// 2 x
- assertArrayEquals(asArray(A1_B1, A2), merge(A1, B1, A2));
- assertArrayEquals(asArray(A1_A2, B1), merge(A2, A1, B1));
- assertArrayEquals(asArray(A1_B1, A2), merge(B1, A2, A1));
+ assertCellRangesEqual(asArray(A1_B1, A2), merge(A1, B1, A2));
+ assertCellRangesEqual(asArray(A1_A2, B1), merge(A2, A1, B1));
+ assertCellRangesEqual(asArray(A1_B1, A2), merge(B1, A2, A1));
// Not mergeable
// A B
// 1 x A1,B2 --> A1,B2
// 2 x
- assertArrayEquals(asArray(A1, B2), merge(A1, B2));
- assertArrayEquals(asArray(B2, A1), merge(B2, A1));
+ assertCellRangesEqual(asArray(A1, B2), merge(A1, B2));
+ assertCellRangesEqual(asArray(B2, A1), merge(B2, A1));
+ }
+
+ private void assertCellRangesEqual(CellRangeAddress[] a, CellRangeAddress[] b) {
+ assertEquals(getCellAddresses(a), getCellAddresses(b));
+ assertArrayEquals(a, b);
+ }
+
+ private static Set<CellAddress> getCellAddresses(CellRangeAddress[] ranges) {
+ final Set<CellAddress> set = new HashSet<>();
+ for (final CellRangeAddress range : ranges) {
+ set.addAll(asSet(range.iterator()));
+ }
+ return set;
+ }
+
+ private static <T> Set<T> asSet(Iterator<T> iterator) {
+ return new HashSet<T>(IteratorUtils.toList(iterator));
}
private static <T> T[] asArray(T...ts) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org