mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 04:30:10 +00:00
Added check for total arguments size for variadic functions.
This commit is contained in:
parent
12193790e5
commit
51e304f10f
@ -1035,6 +1035,10 @@ static void FunctionCall (ExprDesc* Expr)
|
|||||||
/* Parse the argument list and pass them to the called function */
|
/* Parse the argument list and pass them to the called function */
|
||||||
ArgSize = FunctionArgList (Func, IsFastcall, Expr);
|
ArgSize = FunctionArgList (Func, IsFastcall, Expr);
|
||||||
|
|
||||||
|
if (ArgSize > 0xFF && (Func->Flags & FD_VARIADIC) != 0) {
|
||||||
|
Error ("Total size of all arguments passed to a variadic function cannot exceed 255 bytes");
|
||||||
|
}
|
||||||
|
|
||||||
/* We need the closing paren here */
|
/* We need the closing paren here */
|
||||||
ConsumeRParen ();
|
ConsumeRParen ();
|
||||||
|
|
||||||
|
13
test/err/bug2144.c
Normal file
13
test/err/bug2144.c
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/* Bug #2144 - Maximum parameter size is not checked for variadic functions */
|
||||||
|
|
||||||
|
void a(...) {}
|
||||||
|
|
||||||
|
void b()
|
||||||
|
{
|
||||||
|
/* Argument size > 255 */
|
||||||
|
a(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
||||||
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
||||||
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
||||||
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
||||||
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user