[PATCH xkbcomp 1/2] Always terminate the scanBuf string (#66345)

Peter Hutterer peter.hutterer at who-t.net
Wed Jul 10 20:58:06 PDT 2013


If a key name exceeds 4 characters, the content of scanBuf is not
null-terminated, giving error messages like

syntax error: line 7 of test.xkb
last scanned symbol is: FOOBARm
Errors encountered in test.xkb; not compiled.

(last character of the preceding 'maximum' statement in this case)

X.Org Bug 66345 <http://bugs.freedesktop.org/show_bug.cgi?id=66345>

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 xkbscan.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/xkbscan.c b/xkbscan.c
index a05d569..b605863 100644
--- a/xkbscan.c
+++ b/xkbscan.c
@@ -400,6 +400,7 @@ static int
 yyGetKeyName(void)
 {
     int ch, i;
+    int last;
 
     i = 0;
     while (((ch = scanchar()) != EOF) && (ch != '>'))
@@ -465,12 +466,19 @@ yyGetKeyName(void)
         if (i < sizeof(scanBuf) - 1)
             scanBuf[i++] = ch;
     }
+
+    if (i < sizeof(scanBuf) - i)
+        last = i;
+    else
+        last = sizeof(scanBuf) - 1;
+
+    scanBuf[last] = '\0';
+
     if ((ch == '>') && (i < 5))
     {
-        scanBuf[i++] = '\0';
         scanStrLine = lineNum;
         return KEYNAME;
     }
     return ERROR_TOK;
 }
 
-- 
1.8.2.1



More information about the xorg-devel mailing list