Avoid rare crashes due to "C-g C-g" on TTY frames

* src/term.c (tty_send_additional_strings): Don't use SBYTES, as
this function could be called in the middle of GC.  (Bug#77205)
This commit is contained in:
Eli Zaretskii 2025-03-23 13:17:06 +02:00
parent 467aba67db
commit 939a2a3c2d

View file

@ -184,9 +184,15 @@ tty_send_additional_strings (struct terminal *terminal, Lisp_Object sym)
Lisp_Object string = XCAR (extra_codes);
if (STRINGP (string))
{
fwrite (SDATA (string), 1, SBYTES (string), tty->output);
struct Lisp_String *str = XSTRING (string);
/* Don't use SBYTES, as that is not protected from GC. */
ptrdiff_t sbytes
= (str->u.s.size_byte < 0
? str->u.s.size & ~ARRAY_MARK_FLAG
: str->u.s.size_byte);
fwrite (SDATA (string), 1, sbytes, tty->output);
if (tty->termscript)
fwrite (SDATA (string), 1, SBYTES (string), tty->termscript);
fwrite (SDATA (string), 1, sbytes, tty->termscript);
}
}
}