diff --git a/src/main/java/org/ahocorasick/trie/Trie.java b/src/main/java/org/ahocorasick/trie/Trie.java index fba65f0..bf2948a 100644 --- a/src/main/java/org/ahocorasick/trie/Trie.java +++ b/src/main/java/org/ahocorasick/trie/Trie.java @@ -47,6 +47,9 @@ public class Trie { } public void addKeyword(String keyword) { + if (keyword == null || keyword.length() == 0) { + return; + } State currentState = this.rootState; for (Character character : keyword.toCharArray()) { currentState = currentState.addState(character); diff --git a/src/test/java/org/ahocorasick/trie/TrieTest.java b/src/test/java/org/ahocorasick/trie/TrieTest.java index 7203fb5..fb71acb 100644 --- a/src/test/java/org/ahocorasick/trie/TrieTest.java +++ b/src/test/java/org/ahocorasick/trie/TrieTest.java @@ -193,6 +193,19 @@ public class TrieTest { assertEquals(5, tokens.size()); } + @Test + public void zeroLengthTestBug7InGithubReportedByXCurry() { + Trie trie = new Trie().removeOverlaps().onlyWholeWords().caseInsensitive(); + trie.addKeyword(""); + + Collection tokens = trie.tokenize("Try a natural lip and subtle bronzer to keep all the focus on those big bright eyes with NARS Eyeshadow Duo in Rated R And the winner is... Boots No7 Advanced Renewal Anti-ageing Glycolic Peel Kit ($25 amazon.com) won most-appealing peel."); + for (Token token : tokens) { + if (!token.isMatch()) { + System.out.println("token: " + token.getFragment()); + } + } + } + private void checkEmit(Emit next, int expectedStart, int expectedEnd, String expectedKeyword) { assertEquals(expectedStart, next.getStart()); assertEquals(expectedEnd, next.getEnd());