summaryrefslogtreecommitdiff
path: root/xkbscan.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-07-11 13:26:18 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-07-18 15:38:52 +1000
commitcdcd552041fc1325a2a81e3374fadb0dd15950dc (patch)
tree7ff9841904616bcf3f8650387d84218f4fca2641 /xkbscan.c
parent1cd5c50c54b06de2238d6d7675d0a3c65a21414d (diff)
downloadxorg-app-xkbcomp-cdcd552041fc1325a2a81e3374fadb0dd15950dc.tar.gz
Always terminate the scanBuf string (#66345)
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@who-t.net>
Diffstat (limited to 'xkbscan.c')
-rw-r--r--xkbscan.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/xkbscan.c b/xkbscan.c
index 7b91b45..144f315 100644
--- a/xkbscan.c
+++ b/xkbscan.c
@@ -401,6 +401,7 @@ static int
yyGetKeyName(void)
{
int ch, i;
+ int last;
i = 0;
while (((ch = scanchar()) != EOF) && (ch != '>'))
@@ -466,12 +467,20 @@ 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;
}