~petersanchez/st

cdb55d8d3fb96073e3254e26529deb38acbc5849 — Hiltjo Posthuma 2 years ago 5914339
fix buffer overflow when handling long composed input

To reproduce the issue:

"
If you already have the multi-key enabled on your system, then add this line
to your ~/.XCompose file:

[...]
<question> <T> <E> <S> <T> <question> :
"1234567890123456789012345678901234567890123456789012345678901234567890"
"

Reported by and an initial patch by Andy Gozas <andy@gozas.me>, thanks!

Adapted the patch, for now st (like dmenu) handles a fixed amount of composed
characters, or otherwise ignores it. This is done for simplicity sake.
1 files changed, 6 insertions(+), 3 deletions(-)

M x.c
M x.c => x.c +6 -3
@@ 1851,7 1851,7 @@ void
kpress(XEvent *ev)
{
	XKeyEvent *e = &ev->xkey;
	KeySym ksym;
	KeySym ksym = NoSymbol;
	char buf[64], *customkey;
	int len;
	Rune c;


@@ 1861,10 1861,13 @@ kpress(XEvent *ev)
	if (IS_SET(MODE_KBDLOCK))
		return;

	if (xw.ime.xic)
	if (xw.ime.xic) {
		len = XmbLookupString(xw.ime.xic, e, buf, sizeof buf, &ksym, &status);
	else
		if (status == XBufferOverflow)
			return;
	} else {
		len = XLookupString(e, buf, sizeof buf, &ksym, NULL);
	}
	/* 1. shortcuts */
	for (bp = shortcuts; bp < shortcuts + LEN(shortcuts); bp++) {
		if (ksym == bp->keysym && match(bp->mod, e->state)) {