mirror of
https://github.com/neovim/neovim.git
synced 2025-10-09 19:36:40 +00:00
fix(terminal): fix OSC 8 parsing (#34424)
vterm does not send us the terminator in the string fragment. Our OSC 8
parser assumed that it was and therefore treated short strings as
invalid (as it assumed it was missing a terminator).
(cherry picked from commit b5aef05b8f
)
This commit is contained in:

committed by
github-actions[bot]
![github-actions[bot]](/assets/img/avatar_default.png)
parent
5d0766ddce
commit
36c6f488e4
@@ -283,31 +283,22 @@ static int parse_osc8(VTermStringFragment frag, int *attr)
|
||||
}
|
||||
}
|
||||
|
||||
// Move past the semicolon
|
||||
i++;
|
||||
|
||||
if (i >= frag.len) {
|
||||
if (frag.str[i] != ';') {
|
||||
// Invalid OSC sequence
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Find the terminator
|
||||
const size_t start = i;
|
||||
for (; i < frag.len; i++) {
|
||||
if (frag.str[i] == '\a' || frag.str[i] == '\x1b') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Move past the semicolon
|
||||
i++;
|
||||
|
||||
const size_t len = i - start;
|
||||
if (len == 0) {
|
||||
if (i >= frag.len) {
|
||||
// Empty OSC 8, no URL
|
||||
*attr = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
char *url = xmemdupz(&frag.str[start], len + 1);
|
||||
url[len] = 0;
|
||||
char *url = xmemdupz(&frag.str[i], frag.len - i + 1);
|
||||
url[frag.len - i] = 0;
|
||||
*attr = hl_add_url(0, url);
|
||||
xfree(url);
|
||||
|
||||
|
Reference in New Issue
Block a user