CodeQL 文档

向格式化函数传递了错误类型的参数

ID: cpp/wrong-type-format-argument
Kind: problem
Security severity: 7.5
Severity: error
Precision: high
Tags:
   - reliability
   - correctness
   - security
   - external/cwe/cwe-686
Query suites:
   - cpp-code-scanning.qls
   - cpp-security-extended.qls
   - cpp-security-and-quality.qls

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

printf 函数或相关函数的每次调用都应包含格式定义的参数类型和顺序。如果传递给函数的参数类型或顺序不同,则会重新解释参数以符合预期的类型和顺序,从而导致不可预测的行为。

建议

查看突出显示的函数调用预期的格式和参数。更新格式或参数,以便将预期类型和顺序的参数传递给函数。

示例

在以下示例中,为整数格式参数指定了错误的格式说明符

int main() {
  printf("%s\n", 42); // BAD: printf will treat 42 as a char*, will most likely segfault
  return 0;
}

更正后的版本使用 %i 作为整数格式参数的格式说明符

int main() {
  printf("%i\n", 42); // GOOD: printf will treat 42 as an int
  return 0;
}

参考

  • ©GitHub 公司
  • 条款
  • 隐私