[de] CompoundInfinitivRule isn't thread-safe

Author: donnerpeterCreated Oct 26, 2022Updated Aug 4, 2026
LabelsGermancode/java

A MultiThreadedJLanguageTool creates the rule only once, but it's run from different threads, which may cause this exception:

Caused by: java.nio.BufferOverflowException
	at java.base/java.nio.Buffer.nextPutIndex(Buffer.java:722)
	at java.base/java.nio.HeapCharBuffer.put(HeapCharBuffer.java:209)
	at morfologik.speller.Speller.charSequenceToBytes(Speller.java:185)
	at morfologik.speller.Speller.isInDictionary(Speller.java:253)
	at morfologik.speller.Speller.isMisspelled(Speller.java:233)
	at org.languagetool.rules.de.CompoundInfinitivRule.isMisspelled(CompoundInfinitivRule.java:170)
	at org.languagetool.rules.de.CompoundInfinitivRule.match(CompoundInfinitivRule.java:274)

From the source it also seems that the speller field is initialized in a thread-unsafe way (no volatile, no locks).

Source: languagetool-org/languagetool