mirror of
https://github.com/neovim/neovim.git
synced 2026-07-18 23:21:35 +00:00
fix(terminal): skip setting string_initial to false on no-op (#34176)
Problem: Currently undefined behavior can occur when `string_fragment()` is called with `OSC_COMMAND`. This is because when the state changes to `OSC_COMMAND`, `string_initial` is set to true. Then in some cases, directly after this `string_initial` will be set back to false before the on_osc callback is called, this leads to `term_settermprop()` never initializing the title. Solution: In all of the no-op cases in `string_fragment()` currently, we continue to the end of the function where `vt->parser.string_initial` is set to false. This change returns in the no-op cases instead since in these cases the string has not yet been terminated and sent to the callback. Note: This change also adds a test with a byte sequence from the file in #34028 that caused nvim to crash. This byte sequences is the shortest sequence I could trim down from that file that still would trigger the crash. There are also two other tests I added which validate that setting the title with OSC-0 and OSC-2 still works. Fixes: #34028
This commit is contained in:
@@ -122,7 +122,7 @@ static void string_fragment(VTerm *vt, const char *str, size_t len, bool final)
|
||||
case CSI_INTERMED:
|
||||
case OSC_COMMAND:
|
||||
case DCS_COMMAND:
|
||||
break;
|
||||
return;
|
||||
}
|
||||
|
||||
vt->parser.string_initial = false;
|
||||
|
||||
Reference in New Issue
Block a user