Skip to content

figlet is vulnerable to denial of service via unbounded loop when whitespaceBreak is used with a small width

Moderate
patorjk published GHSA-62ch-8vmq-8xm7 Jul 21, 2026

Package

npm figlet (npm)

Affected versions

< 1.11.3

Patched versions

1.11.3

Description

Impact

A denial-of-service (infinite loop) can occur in text() / textSync() when
both:

  • whitespaceBreak: true is set, and
  • width is set smaller than the rendered width of a single FIGlet character.
    Under these conditions breakWord() could never find a valid break point, so the
    word-wrapping loop in generateFigTextLines() never terminated. This pins a CPU
    core and grows memory without bound, blocking the Node.js event loop.

Severity

Low or Medium. Triggering requires a non-default configuration (whitespaceBreak: true) and
an attacker-controlled width value reaching text()/textSync(). This library is typically
used with fixed options, where this is not
reachable. Applications that pass an untrusted width together with
whitespaceBreak on a request path are affected.

Patches

Fixed in figlet 1.11.3. breakWord() now always makes forward progress
(emitting an over-wide character on its own line), and FIGlet header parsing now
rejects invalid values (e.g. zero/negative height).

Workarounds

Do not expose width to untrusted input, or leave whitespaceBreak disabled
(the default), or upgrade to 1.11.3.

References

Severity

Moderate

CVE ID

No known CVE

Weaknesses

Loop with Unreachable Exit Condition ('Infinite Loop')

The product contains an iteration or loop with an exit condition that cannot be reached, i.e., an infinite loop. Learn more on MITRE.

Credits