]> git.ipfire.org Git - thirdparty/systemd.git/commit
string-util: Prevent infinite loop pegging CPU on malformed ESC input
authorChris Down <chris@chrisdown.name>
Sat, 14 Feb 2026 16:40:14 +0000 (00:40 +0800)
committerMike Yuan <me@yhndnzj.com>
Sat, 14 Feb 2026 20:49:24 +0000 (21:49 +0100)
commit0a664310311b9b2abc79978eb4427c36268c1296
treefab79aed1f63d090191d7ebe751cd5c833dd851c
parent8734b0ff32f8631ae77f9c96cf27bbca67a4bacd
string-util: Prevent infinite loop pegging CPU on malformed ESC input

string_has_ansi_sequence() currently does this to look for ESC input:

    t = memchr(s, 0x1B, ...)

So each iteration re-searches from the original start pointer. But if we
find an ESC byte that does *not* start a valid ANSI sequence (like "\x1B
", or an ESC at the end of the string), then ansi_sequence_length()
returns 0, and if that ESC is still in the search window, we will just
spin consuming 100% CPU forever.

Fix this by always advancing past rejected ESC bytes.
src/basic/string-util.c
src/test/test-ellipsize.c