embryo_cc - fix buffer overrun possibility

fix CID 1039586
This commit is contained in:
Carsten Haitzler 2014-09-01 18:51:30 +09:00
parent 6d694962c6
commit 1b74f19b60
1 changed files with 24 additions and 10 deletions

View File

@ -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 */