You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by "Geoffrey Lawson (Jira)" <ji...@apache.org> on 2021/05/18 09:58:00 UTC
[jira] [Created] (LUCENE-9963) Flatten graph filter has errors when
there are holes at beginning or end of alternate paths
Geoffrey Lawson created LUCENE-9963:
---------------------------------------
Summary: Flatten graph filter has errors when there are holes at beginning or end of alternate paths
Key: LUCENE-9963
URL: https://issues.apache.org/jira/browse/LUCENE-9963
Project: Lucene - Core
Issue Type: Bug
Components: modules/analysis
Affects Versions: 8.8
Reporter: Geoffrey Lawson
If asserts are enabled having gaps at the beginning or end of an alternate path can result in assertion errors
ex:
{code:java}
java.lang.AssertionError: 2
at org.apache.lucene.analysis.core.FlattenGraphFilter.releaseBufferedToken(FlattenGraphFilter.java:195)
{code}
Or
{code:java}
java.lang.AssertionError
at org.apache.lucene.analysis.core.FlattenGraphFilter.releaseBufferedToken(FlattenGraphFilter.java:191)
{code}
If asserts are not enabled these the same conditions will result in either IndexOutOfBounds Exceptions, or dropped tokens.
{code:java}
java.lang.ArrayIndexOutOfBoundsException: Index -2 out of bounds for length 8
at org.apache.lucene.util.RollingBuffer.get(RollingBuffer.java:109)
at org.apache.lucene.analysis.core.FlattenGraphFilter.incrementToken(FlattenGraphFilter.java:325)
{code}
These issues can be recreated with the following unit tests
{code:java}
public void testAltPathFirstStepHole() throws IOException {
TokenStream in = new CannedTokenStream(0, 3, new Token[]{
token("abc",1, 3, 0, 3),
token("b",1, 1, 1, 2),
token("c",1, 1, 2, 3)
});
TokenStream out = new FlattenGraphFilter(in);
assertTokenStreamContents(out,
new String[]{"abc", "b", "c"},
new int[] {0, 1, 2},
new int[] {3, 2, 3},
new int[] {1, 1, 1},
new int[] {3, 1, 1}, //token 0 may need to be len 1 after flattening
3);
}{code}
{code:java}
public void testAltPathLastStepHole() throws IOException {
TokenStream in = new CannedTokenStream(0, 4, new Token[]{
token("abc",1, 3, 0, 3),
token("a",0, 1, 0, 1),
token("b",1, 1, 1, 2),
token("d",2, 1, 3, 4)
});
TokenStream out = new FlattenGraphFilter(in);
assertTokenStreamContents(out,
new String[]{"abc", "a", "b", "d"},
new int[] {0, 0, 1, 3},
new int[] {1, 1, 2, 4},
new int[] {1, 0, 1, 2},
new int[] {3, 1, 1, 1},
4);
}{code}
{code:java}
public void testAltPathLastStepHoleWithoutEndToken() throws IOException {
TokenStream in = new CannedTokenStream(0, 2, new Token[]{
token("abc",1, 3, 0, 3),
token("a",0, 1, 0, 1),
token("b",1, 1, 1, 2)
});
TokenStream out = new FlattenGraphFilter(in);
assertTokenStreamContents(out,
new String[]{"abc", "a", "b"},
new int[] {0, 0, 1},
new int[] {1, 1, 2},
new int[] {1, 0, 1},
new int[] {1, 1, 1},
2);
}{code}
I believe Lucene-8723 is a related issue as it looks like the last token in an alternate path is being deleted.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org