mirror of https://github.com/apache/lucene.git
throw better exception if you try to exceed 2GB of taxonomy facet labels
This commit is contained in:
parent
aa27148594
commit
38685f30dc
|
@ -65,6 +65,9 @@ class CharBlockArray implements Appendable, Serializable, CharSequence {
|
|||
}
|
||||
|
||||
private void addBlock() {
|
||||
if (blockSize * (long) (blocks.size() + 1) > Integer.MAX_VALUE) {
|
||||
throw new IllegalStateException("cannot store more than 2 GB in CharBlockArray");
|
||||
}
|
||||
this.current = new Block(this.blockSize);
|
||||
this.blocks.add(this.current);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.lucene.facet.taxonomy.writercache;
|
||||
|
||||
import org.apache.lucene.util.LuceneTestCase.Monster;
|
||||
import org.apache.lucene.util.LuceneTestCase;
|
||||
import org.apache.lucene.util.TestUtil;
|
||||
|
||||
@Monster("uses lots of space and takes a few minutes")
|
||||
public class Test2GBCharBlockArray extends LuceneTestCase {
|
||||
|
||||
public void test2GBChars() throws Exception {
|
||||
int blockSize = 32768;
|
||||
CharBlockArray array = new CharBlockArray(blockSize);
|
||||
|
||||
int size = TestUtil.nextInt(random(), 20000, 40000);
|
||||
|
||||
char[] chars = new char[size];
|
||||
int count = 0;
|
||||
while (true) {
|
||||
count++;
|
||||
try {
|
||||
array.append(chars, 0, size);
|
||||
} catch (IllegalStateException ise) {
|
||||
assertTrue(count * (long) size + blockSize > Integer.MAX_VALUE);
|
||||
break;
|
||||
}
|
||||
assertFalse("appended " + (count * (long) size - Integer.MAX_VALUE) + " characters beyond Integer.MAX_VALUE!",
|
||||
count * (long) size > Integer.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -27,11 +27,9 @@ import java.nio.file.Path;
|
|||
|
||||
import org.apache.lucene.facet.FacetTestCase;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class TestCharBlockArray extends FacetTestCase {
|
||||
|
||||
@Test public void testArray() throws Exception {
|
||||
public void testArray() throws Exception {
|
||||
CharBlockArray array = new CharBlockArray();
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
|
|
Loading…
Reference in New Issue