调用函数的参数少于声明的参数¶
ID: cpp/too-few-arguments
Kind: problem
Security severity: 5.0
Severity: error
Precision: very-high
Tags:
- correctness
- maintainability
- security
- external/cwe/cwe-234
- external/cwe/cwe-685
Query suites:
- cpp-code-scanning.qls
- cpp-security-extended.qls
- cpp-security-and-quality.qls
函数调用时,参数少于函数的参数个数。
这可能意味着调用了错误的函数,或者函数签名(参数列表)没有被编写者知晓。
在 C 语言中,函数调用通常需要提供与函数参数数量相同的参数。(可变参数函数可以接受额外的参数。)提供少于参数个数的参数非常危险,因为被调用函数仍然会尝试获取缺失参数的值,这些值可能是从堆栈或机器寄存器中获取的。因此,函数的行为可能会变得不可预测。
如果被调用函数修改了与缺失参数相对应的参数,它可能会在返回时改变程序的状态。攻击者可以利用这一点来改变程序的控制流程,从而访问受限资源。
建议¶
使用正确数量的参数调用函数。
示例¶
void one_argument();
void calls() {
one_argument(1); // GOOD: `one_argument` will accept and use the argument
one_argument(); // BAD: `one_argument` will receive an undefined value
}
void one_argument(int x);
参考¶
SEI CERT C 编码标准: DCL20-C. 显式指定 void 当函数不接受任何参数时
通用弱点枚举:CWE-234.
通用弱点枚举:CWE-685.