diff options
author | Benno Schulenberg <bensberg@justemail.net> | 2013-08-28 20:03:30 +0200 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-08-29 09:38:24 +1000 |
commit | 24d18e0a844041ef82441adb16aa18cc4b4814ae (patch) | |
tree | 431227b043a41d0e660e39cf24ec755aab6c3dfc | |
parent | 0ebdf47fd4bc434ac3d2339544c022a869510738 (diff) |
Making sure that a copied string is always null-terminated (#66345).
A more minimalistic and formally correct solution.
This amends and extends the previous fix for bug #66345,
fixing not just yyGetKeyName() but also yyGetString().
Signed-off-by: Benno Schulenberg <bensberg@justemail.net>
Fixes a typo from cdcd552 (should be sizeof - 1, not sizeof -i).
Code flows that i is at most sizeof(scanBuf) - 1, so last is not needed.
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | xkbscan.c | 14 |
1 files changed, 2 insertions, 12 deletions
@@ -388,9 +388,9 @@ yyGetString(void) if (i < sizeof(scanBuf) - 1) scanBuf[i++] = ch; } + scanBuf[i] = '\0'; if (ch == '"') { - scanBuf[i++] = '\0'; scanStrLine = lineNum; return STRING; } @@ -401,7 +401,6 @@ static int yyGetKeyName(void) { int ch, i; - int last; i = 0; while (((ch = scanchar()) != EOF) && (ch != '>')) @@ -463,24 +462,15 @@ yyGetKeyName(void) else return ERROR_TOK; } - if (i < sizeof(scanBuf) - 1) scanBuf[i++] = ch; } - - if (i < sizeof(scanBuf) - i) - last = i; - else - last = sizeof(scanBuf) - 1; - - scanBuf[last] = '\0'; - + scanBuf[i] = '\0'; if ((ch == '>') && (i < 5)) { scanStrLine = lineNum; return KEYNAME; } - return ERROR_TOK; } |