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:
Gregory Anders
2025-06-10 15:52:45 -05:00
committed by github-actions[bot]
parent 5d0766ddce
commit 36c6f488e4
2 changed files with 14 additions and 22 deletions

View File

@@ -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);