Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
8.11.1
-
None
-
None
-
None
-
New
Description
Hello devs,
the constructor of BooleanQuery can under some circumstances trigger a hash code computation before "clauseSets" is fully filled. Since BooleanClause is using its query field for the hash code too, it can happen that the "wrong" hash code is stored, since adding the clause to the set triggers its hashCode().
If assertions are enabled the check in BooleanQuery, which recomputes the hash code, will notice it and throw an error.
exception:
java.lang.AssertionError at org.apache.lucene.search.BooleanQuery.hashCode(BooleanQuery.java:614) at java.base/java.util.Objects.hashCode(Objects.java:103) at java.base/java.util.HashMap$Node.hashCode(HashMap.java:298) at java.base/java.util.AbstractMap.hashCode(AbstractMap.java:527) at org.apache.lucene.search.Multiset.hashCode(Multiset.java:119) at java.base/java.util.EnumMap.entryHashCode(EnumMap.java:717) at java.base/java.util.EnumMap.hashCode(EnumMap.java:709) at java.base/java.util.Arrays.hashCode(Arrays.java:4498) at java.base/java.util.Objects.hash(Objects.java:133) at org.apache.lucene.search.BooleanQuery.computeHashCode(BooleanQuery.java:597) at org.apache.lucene.search.BooleanQuery.hashCode(BooleanQuery.java:611) at java.base/java.util.HashMap.hash(HashMap.java:340) at java.base/java.util.HashMap.put(HashMap.java:612) at org.apache.lucene.search.Multiset.add(Multiset.java:82) at org.apache.lucene.search.BooleanQuery.<init>(BooleanQuery.java:154) at org.apache.lucene.search.BooleanQuery.<init>(BooleanQuery.java:42) at org.apache.lucene.search.BooleanQuery$Builder.build(BooleanQuery.java:133)
I noticed this while trying to upgrade the NetBeans maven indexer modules from lucene 5.x to 8.x https://github.com/apache/netbeans/pull/3558