CodeQL 文档

调用函数的参数少于声明的参数

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

点击查看 CodeQL 代码库中的查询

函数调用时,参数少于函数的参数个数。

这可能意味着调用了错误的函数,或者函数签名(参数列表)没有被编写者知晓。

在 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);

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私