summaryrefslogtreecommitdiff
path: root/src/bin/embryo
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2014-09-01 18:51:30 +0900
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2014-09-01 19:40:46 +0900
commit1b74f19b60ed46eb28b6e3469227fb733e00fb7a (patch)
treefe7e1af10002a00dbc8227994a0eba5c0621c0a1 /src/bin/embryo
parent6d694962c651da9c7e2b0a1fb3aa784b3b56ec9d (diff)
downloadefl-1b74f19b60ed46eb28b6e3469227fb733e00fb7a.tar.gz
embryo_cc - fix buffer overrun possibility
fix CID 1039586
Diffstat (limited to 'src/bin/embryo')
-rw-r--r--src/bin/embryo/embryo_cc_sc2.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/bin/embryo/embryo_cc_sc2.c b/src/bin/embryo/embryo_cc_sc2.c
index b63354f821..2da0656c2a 100644
--- a/src/bin/embryo/embryo_cc_sc2.c
+++ b/src/bin/embryo/embryo_cc_sc2.c
@@ -2168,16 +2168,30 @@ needtoken(int token)
{
/* token already pushed back */
assert(_pushed);
- if (token < 256)
- sprintf(s1, "%c", (char)token); /* single character token */
- else
- strcpy(s1, sc_tokens[token - tFIRST]); /* multi-character symbol */
- if (!freading)
- strcpy(s2, "-end of file-");
- else if (_lextok < 256)
- sprintf(s2, "%c", (char)_lextok);
- else
- strcpy(s2, sc_tokens[_lextok - tFIRST]);
+ if (token < 256)
+ {
+ s1[0] = (char)token; /* single character token */
+ s1[1] = 0;
+ }
+ else
+ {
+ strncpy(s1, sc_tokens[token - tFIRST], 19); /* multi-character symbol */
+ }
+ s1[19] = 0;
+ if (!freading)
+ {
+ strncpy(s2, "-end of file-", 19);
+ }
+ else if (_lextok < 256)
+ {
+ s2[0] = (char)_lextok;
+ s2[1] = 0;
+ }
+ else
+ {
+ strncpy(s2, sc_tokens[_lextok - tFIRST], 19);
+ }
+ s2[19] = 0;
error(1, s1, s2); /* expected ..., but found ... */
return FALSE;
} /* if */