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.
(cherry picked from commit
0a664310311b9b2abc79978eb4427c36268c1296)
(cherry picked from commit
21f6f686b4e0253ad74861c349f86d53e84d582b)
(cherry picked from commit
123d536eccaffea66378d87ebeb29c0042931976)