You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2018/06/28 16:11:29 UTC
lucene-solr:master: Fix PriorityQueue constructor to throw
IllegalArgumentException if you pass Integer.MAX_VALUE as maxSize (thanks
rsaavedraf)
Repository: lucene-solr
Updated Branches:
refs/heads/master ab666ff9c -> 4c646dab3
Fix PriorityQueue constructor to throw IllegalArgumentException if you pass Integer.MAX_VALUE as maxSize (thanks rsaavedraf)
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4c646dab
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4c646dab
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4c646dab
Branch: refs/heads/master
Commit: 4c646dab3fbf023c0dffd6f4601888760159ed8b
Parents: ab666ff
Author: Mike McCandless <mi...@apache.org>
Authored: Thu Jun 28 12:11:18 2018 -0400
Committer: Mike McCandless <mi...@apache.org>
Committed: Thu Jun 28 12:11:18 2018 -0400
----------------------------------------------------------------------
.../src/java/org/apache/lucene/util/PriorityQueue.java | 11 ++++++-----
.../test/org/apache/lucene/util/TestPriorityQueue.java | 12 ++++++++++++
2 files changed, 18 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4c646dab/lucene/core/src/java/org/apache/lucene/util/PriorityQueue.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/util/PriorityQueue.java b/lucene/core/src/java/org/apache/lucene/util/PriorityQueue.java
index 83ac613..ef08c4a 100644
--- a/lucene/core/src/java/org/apache/lucene/util/PriorityQueue.java
+++ b/lucene/core/src/java/org/apache/lucene/util/PriorityQueue.java
@@ -50,14 +50,15 @@ public abstract class PriorityQueue<T> implements Iterable<T> {
// We allocate 1 extra to avoid if statement in top()
heapSize = 2;
} else {
- // NOTE: we add +1 because all access to heap is
- // 1-based not 0-based. heap[0] is unused.
- heapSize = maxSize + 1;
- if (heapSize > ArrayUtil.MAX_ARRAY_LENGTH) {
+ if ((maxSize < 0) || (maxSize >= ArrayUtil.MAX_ARRAY_LENGTH)) {
// Throw exception to prevent confusing OOME:
- throw new IllegalArgumentException("maxSize must be <= " + (ArrayUtil.MAX_ARRAY_LENGTH-1) + "; got: " + maxSize);
+ throw new IllegalArgumentException("maxSize must be >= 0 and < " + (ArrayUtil.MAX_ARRAY_LENGTH) + "; got: " + maxSize);
}
+
+ // NOTE: we add +1 because all access to heap is
+ // 1-based not 0-based. heap[0] is unused.
+ heapSize = maxSize + 1;
}
// T is unbounded type, so this unchecked cast works always:
@SuppressWarnings("unchecked") final T[] h = (T[]) new Object[heapSize];
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4c646dab/lucene/core/src/test/org/apache/lucene/util/TestPriorityQueue.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/util/TestPriorityQueue.java b/lucene/core/src/test/org/apache/lucene/util/TestPriorityQueue.java
index ba28490..efc65d0 100644
--- a/lucene/core/src/test/org/apache/lucene/util/TestPriorityQueue.java
+++ b/lucene/core/src/test/org/apache/lucene/util/TestPriorityQueue.java
@@ -252,4 +252,16 @@ public class TestPriorityQueue extends LuceneTestCase {
assertEquals(expected, actual);
}
}
+
+ public void testMaxIntSize() {
+ expectThrows(IllegalArgumentException.class, () -> {
+ new PriorityQueue<Boolean>(Integer.MAX_VALUE) {
+ @Override
+ public boolean lessThan(Boolean a, Boolean b) {
+ // uncalled
+ return true;
+ }
+ };
+ });
+ }
}