diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2014-09-01 18:51:30 +0900 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2014-09-01 19:40:46 +0900 |
commit | 1b74f19b60ed46eb28b6e3469227fb733e00fb7a (patch) | |
tree | fe7e1af10002a00dbc8227994a0eba5c0621c0a1 /src | |
parent | 6d694962c651da9c7e2b0a1fb3aa784b3b56ec9d (diff) | |
download | efl-1b74f19b60ed46eb28b6e3469227fb733e00fb7a.tar.gz |
embryo_cc - fix buffer overrun possibility
fix CID 1039586
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/embryo/embryo_cc_sc2.c | 34 |
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 */ |