Xinqi Bao's Git
projects
/
st.git
/ diff
summary
|
log
|
commit
|
diff
|
tree
raw
|
patch
|
inline
| side by side (parent:
02ae3ce
)
Avoid buffer overrun in kpress() and remove limit on shortcut strings.
author
Mark Edgar <
[email protected]
>
Sat, 5 Oct 2013 09:45:44 +0000
(11:45 +0200)
committer
Roberto E. Vargas Caballero <
[email protected]
>
Mon, 7 Oct 2013 19:03:51 +0000
(21:03 +0200)
st.c
diff
|
blob
|
history
diff --git
a/st.c
b/st.c
index
331509f
..
16bf68b
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-264,7
+264,7
@@
typedef struct {
typedef struct {
KeySym k;
uint mask;
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 */
/* three valued logic variables: 0 indifferent, 1 on, -1 off */
signed char appkey; /* application keypad */
signed char appcursor; /* application cursor */
@@
-3585,26
+3585,27
@@
kpress(XEvent *ev) {
/* 2. custom keys from config.h */
if((customkey = kmap(ksym, e->state))) {
len = strlen(customkey);
/* 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);
ttywrite(buf, len);
if(IS_SET(MODE_ECHO))
techo(buf, len);