Index: lucene/suggest/src/test/org/apache/lucene/search/suggest/fst/WFSTCompletionTest.java =================================================================== --- lucene/suggest/src/test/org/apache/lucene/search/suggest/fst/WFSTCompletionTest.java (revision 1405545) +++ lucene/suggest/src/test/org/apache/lucene/search/suggest/fst/WFSTCompletionTest.java (working copy) @@ -22,6 +22,7 @@ import org.apache.lucene.search.suggest.Lookup.LookupResult; import org.apache.lucene.search.suggest.TermFreq; import org.apache.lucene.search.suggest.TermFreqArrayIterator; +import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.LuceneTestCase; import org.apache.lucene.util._TestUtil; @@ -194,4 +195,18 @@ } } } + + public void test0ByteKeys() throws Exception { + BytesRef key1 = new BytesRef(4); + key1.length = 4; + BytesRef key2 = new BytesRef(3); + key1.length = 3; + + WFSTCompletionLookup suggester = new WFSTCompletionLookup(false); + + suggester.build(new TermFreqArrayIterator(new TermFreq[] { + new TermFreq(key1, 50), + new TermFreq(key2, 50), + })); + } } Index: lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java =================================================================== --- lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java (revision 1405545) +++ lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java (working copy) @@ -983,4 +983,49 @@ assertEquals("b", results.get(1).key); assertEquals(5, results.get(1).value); } + + public void test0ByteKeys() throws Exception { + final Analyzer a = new Analyzer() { + @Override + protected TokenStreamComponents createComponents(String fieldName, Reader reader) { + Tokenizer tokenizer = new MockTokenizer(reader, MockTokenizer.SIMPLE, true); + + return new TokenStreamComponents(tokenizer) { + int tokenStreamCounter = 0; + final TokenStream[] tokenStreams = new TokenStream[] { + new CannedBinaryTokenStream(new BinaryToken[] { + token(new BytesRef(new byte[] {0x0, 0x0, 0x0})), + }), + new CannedBinaryTokenStream(new BinaryToken[] { + token(new BytesRef(new byte[] {0x0, 0x0})), + }), + new CannedBinaryTokenStream(new BinaryToken[] { + token(new BytesRef(new byte[] {0x0, 0x0, 0x0})), + }), + new CannedBinaryTokenStream(new BinaryToken[] { + token(new BytesRef(new byte[] {0x0, 0x0})), + }), + }; + + @Override + public TokenStream getTokenStream() { + TokenStream result = tokenStreams[tokenStreamCounter]; + tokenStreamCounter++; + return result; + } + + @Override + protected void setReader(final Reader reader) throws IOException { + } + }; + } + }; + + AnalyzingSuggester suggester = new AnalyzingSuggester(a, a, 0, 256, -1); + + suggester.build(new TermFreqArrayIterator(new TermFreq[] { + new TermFreq("a a", 50), + new TermFreq("a b", 50), + })); + } }