OSC 52 - copy to clipboard: don't limit to 382 bytes (7a018b)
This commit is contained in:
parent
0d5ea3a3f2
commit
2de79ac677
15
st.c
15
st.c
|
@ -159,7 +159,8 @@ typedef struct {
|
||||||
/* ESC type [[ [<priv>] <arg> [;]] <mode>] ESC '\' */
|
/* ESC type [[ [<priv>] <arg> [;]] <mode>] ESC '\' */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char type; /* ESC type ... */
|
char type; /* ESC type ... */
|
||||||
char buf[STR_BUF_SIZ]; /* raw string */
|
char *buf; /* allocated raw string */
|
||||||
|
size_t siz; /* allocation size */
|
||||||
size_t len; /* raw string length */
|
size_t len; /* raw string length */
|
||||||
char *args[STR_ARG_SIZ];
|
char *args[STR_ARG_SIZ];
|
||||||
int narg; /* nb of args */
|
int narg; /* nb of args */
|
||||||
|
@ -2073,7 +2074,10 @@ strdump(void)
|
||||||
void
|
void
|
||||||
strreset(void)
|
strreset(void)
|
||||||
{
|
{
|
||||||
memset(&strescseq, 0, sizeof(strescseq));
|
strescseq = (STREscape){
|
||||||
|
.buf = xrealloc(strescseq.buf, STR_BUF_SIZ),
|
||||||
|
.siz = STR_BUF_SIZ,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -2463,7 +2467,7 @@ tputc(Rune u)
|
||||||
if (term.esc&ESC_DCS && strescseq.len == 0 && u == 'q')
|
if (term.esc&ESC_DCS && strescseq.len == 0 && u == 'q')
|
||||||
term.mode |= MODE_SIXEL;
|
term.mode |= MODE_SIXEL;
|
||||||
|
|
||||||
if (strescseq.len+len >= sizeof(strescseq.buf)) {
|
if (strescseq.len+len >= strescseq.siz) {
|
||||||
/*
|
/*
|
||||||
* Here is a bug in terminals. If the user never sends
|
* Here is a bug in terminals. If the user never sends
|
||||||
* some code to stop the str or esc command, then st
|
* some code to stop the str or esc command, then st
|
||||||
|
@ -2477,7 +2481,10 @@ tputc(Rune u)
|
||||||
* term.esc = 0;
|
* term.esc = 0;
|
||||||
* strhandle();
|
* strhandle();
|
||||||
*/
|
*/
|
||||||
return;
|
if (strescseq.siz > (SIZE_MAX - UTF_SIZ) / 2)
|
||||||
|
return;
|
||||||
|
strescseq.siz *= 2;
|
||||||
|
strescseq.buf = xrealloc(strescseq.buf, strescseq.siz);
|
||||||
}
|
}
|
||||||
|
|
||||||
memmove(&strescseq.buf[strescseq.len], c, len);
|
memmove(&strescseq.buf[strescseq.len], c, len);
|
||||||
|
|
Loading…
Reference in New Issue