mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 00:47:10 +09:00
pretty-print: don't use OSC 8 for incompatible URLs
This commit is contained in:
@@ -801,7 +801,7 @@ char* strip_tab_ansi(char **ibuf, size_t *_isz, size_t highlight[2]) {
|
||||
/* There are three kinds of OSC terminators: \x07, \x1b\x5c or \x9c. We only support
|
||||
* the first two, because the last one is a valid UTF-8 codepoint and hence creates
|
||||
* an ambiguity (many Terminal emulators refuse to support it as well). */
|
||||
if (eot || (!IN_SET(*i, '\x07', '\x1b') && (uint8_t) *i < 32U) || (uint8_t) *i > 126U) { /* EOT or invalid chars in sequence */
|
||||
if (eot || (!IN_SET(*i, '\x07', '\x1b') && !osc_char_is_valid(*i))) { /* EOT or invalid chars in sequence */
|
||||
fputc('\x1B', f);
|
||||
fputc(']', f);
|
||||
advance_offsets(i - *ibuf, highlight, shift, 2);
|
||||
|
||||
@@ -157,3 +157,9 @@ int terminal_is_pty_fd(int fd);
|
||||
|
||||
int pty_open_peer_racefree(int fd, int mode);
|
||||
int pty_open_peer(int fd, int mode);
|
||||
|
||||
static inline bool osc_char_is_valid(char c) {
|
||||
/* Checks whether the specified character is safe to be included inside an ANSI OSC sequence, as per
|
||||
* ECMA-48 5th edition, section 8.3.89 */
|
||||
return (unsigned char) c >= 32U && (unsigned char) c < 127;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user