CVE-2026-88054: Tesseract: Denial of service via empty-stack dereference in Plumbing/Series at model load
Tesseract is an open source OCR engine. In version 5.5.3 and earlier, Plumbing::DeSerialize in src/lstm/plumbing.cpp rejects excessively large network stacks but accepts a zero-length stack for NTSERIES, NTPARALLEL, or NTREVERSED layers in a crafted .traineddata model. During LSTMRecognizer initialization in src/lstm/lstmrecognizer.cpp, CacheXScaleFactor(XScaleFactor()) reaches Series::CacheXScaleFactor in src/lstm/series.cpp, which dereferences stack[0] on the empty vector and invokes a virtual method through an invalid Network pointer. This causes a deterministic crash and denial of service at model load. No fixed release is available as of this review.
Affected Software
Event History
Frequently Asked Questions
Who is exposed to this denial-of-service issue?
Deployments using Tesseract 5.5.3 or earlier are exposed if they load a crafted .traineddata model. The crash occurs during LSTMRecognizer initialization at model load.
What does an attacker need to exploit the issue?
An attacker needs to cause Tesseract to load a malicious .traineddata model containing an NT_SERIES, NT_PARALLEL, or NT_REVERSED layer with a zero-length network stack. No further interaction is described after the model is loaded.
What can be done if patching is not immediately possible?
Do not load untrusted .traineddata files, and restrict who can supply or replace model files. Validate the provenance and integrity of models before deployment; no fixed release was available as of the review.
How can I tell whether a model may trigger the issue?
The affected condition is a zero-length stack in an NT_SERIES, NT_PARALLEL, or NT_REVERSED layer within the model's serialized network data. Loading such a model causes a deterministic crash during LSTM model initialization.