diff --git a/lucene/core/src/java/org/apache/lucene/util/BytesRefHash.java b/lucene/core/src/java/org/apache/lucene/util/BytesRefHash.java index 6e1b8fc385e..f65a4e38deb 100644 --- a/lucene/core/src/java/org/apache/lucene/util/BytesRefHash.java +++ b/lucene/core/src/java/org/apache/lucene/util/BytesRefHash.java @@ -214,6 +214,7 @@ protected void get(BytesRefBuilder builder, BytesRef result, int i) { pool.fillBytesRef(result, bytesStart[compact[i]]); } }.sort(0, count); + Arrays.fill(compact, tmpOffset, compact.length, -1); return compact; } diff --git a/lucene/core/src/test/org/apache/lucene/util/TestBytesRefHash.java b/lucene/core/src/test/org/apache/lucene/util/TestBytesRefHash.java index 8f887257df9..c73b1182505 100644 --- a/lucene/core/src/test/org/apache/lucene/util/TestBytesRefHash.java +++ b/lucene/core/src/test/org/apache/lucene/util/TestBytesRefHash.java @@ -176,13 +176,17 @@ public void testSort() { hash.add(ref.get()); strings.add(str); } - int[] sort = hash.sort(); - assertTrue(strings.size() < sort.length); - int i = 0; - BytesRef scratch = new BytesRef(); - for (String string : strings) { - ref.copyChars(string); - assertEquals(ref.get(), hash.get(sort[i++], scratch)); + for (int iter = 0; iter < 3; iter++) { + // Test duplicate sort on a BytesRefHash instance work well. This makes no sense but some + // users need that. + int[] sort = hash.sort(); + assertTrue(strings.size() < sort.length); + int i = 0; + BytesRef scratch = new BytesRef(); + for (String string : strings) { + ref.copyChars(string); + assertEquals(ref.get(), hash.get(sort[i++], scratch)); + } } hash.clear(); assertEquals(0, hash.size());