tAvoid buffer overrun in kpress() and remove limit on shortcut strings. - st - … | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 939e149544e4da958c333f3b6d00991d459c2e34 | |
parent 02ae3ce6fdc178ca6eb9b10b6447bb56a6513a27 | |
Author: Mark Edgar <[email protected]> | |
Date: Sat, 5 Oct 2013 11:45:44 +0200 | |
Avoid buffer overrun in kpress() and remove limit on shortcut strings. | |
Diffstat: | |
M st.c | 35 ++++++++++++++++-------------… | |
1 file changed, 18 insertions(+), 17 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -264,7 +264,7 @@ typedef struct { | |
typedef struct { | |
KeySym k; | |
uint mask; | |
- char s[ESC_BUF_SIZ]; | |
+ char *s; | |
/* three valued logic variables: 0 indifferent, 1 on, -1 off */ | |
signed char appkey; /* application keypad */ | |
signed char appcursor; /* application cursor */ | |
t@@ -3585,26 +3585,27 @@ kpress(XEvent *ev) { | |
/* 2. custom keys from config.h */ | |
if((customkey = kmap(ksym, e->state))) { | |
len = strlen(customkey); | |
- memcpy(buf, customkey, len); | |
- /* 3. composed string from input method */ | |
- } else { | |
- if(len == 0) | |
- return; | |
+ ttywrite(customkey, len); | |
+ if(IS_SET(MODE_ECHO)) | |
+ techo(customkey, len); | |
+ return; | |
+ } | |
- if(len == 1 && e->state & Mod1Mask) { | |
- if(IS_SET(MODE_8BIT)) { | |
- if(*buf < 0177) { | |
- c = *buf | 0x80; | |
- len = utf8encode(&c, buf); | |
- } | |
- } else { | |
- buf[1] = buf[0]; | |
- buf[0] = '\033'; | |
- len = 2; | |
+ /* 3. composed string from input method */ | |
+ if(len == 0) | |
+ return; | |
+ if(len == 1 && e->state & Mod1Mask) { | |
+ if(IS_SET(MODE_8BIT)) { | |
+ if(*buf < 0177) { | |
+ c = *buf | 0x80; | |
+ len = utf8encode(&c, buf); | |
} | |
+ } else { | |
+ buf[1] = buf[0]; | |
+ buf[0] = '\033'; | |
+ len = 2; | |
} | |
} | |
- | |
ttywrite(buf, len); | |
if(IS_SET(MODE_ECHO)) | |
techo(buf, len); |