LUCENE-7232: Fixed InetAddressPoint.newPrefixQuery.

This commit is contained in:
Adrien Grand 2016-04-20 15:13:20 +02:00
parent 858082c4ca
commit 2724b99b5c
3 changed files with 18 additions and 2 deletions

View File

@ -90,6 +90,9 @@ Bug Fixes
* LUCENE-7209: Fixed explanations of FunctionScoreQuery. (Adrien Grand) * LUCENE-7209: Fixed explanations of FunctionScoreQuery. (Adrien Grand)
* LUCENE-7232: Fixed InetAddressPoint.newPrefixQuery, which was generating an
incorrect query when the prefix length was not a multiple of 8. (Adrien Grand)
Documentation Documentation
* LUCENE-7223: Improve XXXPoint javadocs to make it clear that you * LUCENE-7223: Improve XXXPoint javadocs to make it clear that you

View File

@ -174,8 +174,9 @@ public class InetAddressPoint extends Field {
byte lower[] = value.getAddress(); byte lower[] = value.getAddress();
byte upper[] = value.getAddress(); byte upper[] = value.getAddress();
for (int i = prefixLength; i < 8 * lower.length; i++) { for (int i = prefixLength; i < 8 * lower.length; i++) {
lower[i >> 3] &= ~(1 << (i & 7)); int m = 1 << (7 - (i & 7));
upper[i >> 3] |= 1 << (i & 7); lower[i >> 3] &= ~m;
upper[i >> 3] |= m;
} }
try { try {
return newRangeQuery(field, InetAddress.getByAddress(lower), InetAddress.getByAddress(upper)); return newRangeQuery(field, InetAddress.getByAddress(lower), InetAddress.getByAddress(upper));

View File

@ -119,4 +119,16 @@ public class TestInetAddressPoint extends LuceneTestCase {
assertEquals(q1.hashCode(), q2.hashCode()); assertEquals(q1.hashCode(), q2.hashCode());
assertFalse(q1.equals(InetAddressPoint.newSetQuery("a", InetAddress.getByName("1.2.3.3"), InetAddress.getByName("1.2.3.7")))); assertFalse(q1.equals(InetAddressPoint.newSetQuery("a", InetAddress.getByName("1.2.3.3"), InetAddress.getByName("1.2.3.7"))));
} }
public void testPrefixQuery() throws Exception {
assertEquals(
InetAddressPoint.newRangeQuery("a", InetAddress.getByName("1.2.3.0"), InetAddress.getByName("1.2.3.255")),
InetAddressPoint.newPrefixQuery("a", InetAddress.getByName("1.2.3.127"), 24));
assertEquals(
InetAddressPoint.newRangeQuery("a", InetAddress.getByName("1.2.3.128"), InetAddress.getByName("1.2.3.255")),
InetAddressPoint.newPrefixQuery("a", InetAddress.getByName("1.2.3.213"), 25));
assertEquals(
InetAddressPoint.newRangeQuery("a", InetAddress.getByName("2001::a000:0"), InetAddress.getByName("2001::afff:ffff")),
InetAddressPoint.newPrefixQuery("a", InetAddress.getByName("2001::a6bd:fc80"), 100));
}
} }