morfologik / morfologik-stemming

Tools for finite state automata construction and dictionary-based morphological dictionaries. Includes Polish stemming dictionary.
BSD 3-Clause "New" or "Revised" License
186 stars 44 forks source link

BufferUnderflowException thrown from speller #90

Closed nbelisle11 closed 7 years ago

nbelisle11 commented 7 years ago

Similar to https://github.com/morfologik/morfologik-stemming/issues/89 & https://github.com/morfologik/morfologik-stemming/issues/75 seeing Buffer issues bubbling up from the speller. Also seems to be happening intermittently. Error and full stacktrace:

java.lang.RuntimeException: Could not check sentence (language: English (US)): 'cath'

java.nio.BufferUnderflowException: null
    at java.nio.Buffer.nextGetIndex(Buffer.java:500)
    at java.nio.HeapCharBuffer.get(HeapCharBuffer.java:135)
    at morfologik.speller.Speller.findRepl(Speller.java:453)
    at morfologik.speller.Speller.findRepl(Speller.java:501)
    at morfologik.speller.Speller.findRepl(Speller.java:501)
    at morfologik.speller.Speller.findRepl(Speller.java:501)
    at morfologik.speller.Speller.findReplacements(Speller.java:411)
    at org.languagetool.rules.spelling.morfologik.MorfologikSpeller.getSuggestions(MorfologikSpeller.java:91)
    at org.languagetool.rules.spelling.morfologik.MorfologikMultiSpeller.getSuggestions(MorfologikMultiSpeller.java:142)
    at org.languagetool.rules.spelling.morfologik.MorfologikSpellerRule.getRuleMatches(MorfologikSpellerRule.java:182)
    at org.languagetool.rules.en.AbstractEnglishSpellerRule.getRuleMatches(AbstractEnglishSpellerRule.java:45)
    at org.languagetool.rules.spelling.morfologik.MorfologikSpellerRule.match(MorfologikSpellerRule.java:107)
    at org.languagetool.JLanguageTool.checkAnalyzedSentence(JLanguageTool.java:644)
    at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:991)
    at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:943)
    at org.languagetool.JLanguageTool.performCheck(JLanguageTool.java:606)
    at org.languagetool.JLanguageTool.check(JLanguageTool.java:558)
    at org.languagetool.JLanguageTool.check(JLanguageTool.java:508)
    at org.languagetool.JLanguageTool.check(JLanguageTool.java:504)
nbelisle11 commented 7 years ago

In this example https://github.com/morfologik/morfologik-stemming/blob/master/morfologik-speller/src/main/java/morfologik/speller/Speller.java#L359 is being called with string parameter cath

dweiss commented 7 years ago

Same as with #89: looks like you're calling the same speller instance concurrently. This isn't supported.

nbelisle11 commented 7 years ago

We are indeed using this in a multithreaded environment. I'll adjust and reopen if this doesn't resolve the issue. Thanks for the prompt response!