CodeQL 文档

没有空间用于零终止符

ID: cpp/no-space-for-terminator
Kind: problem
Security severity: 9.8
Severity: error
Precision: high
Tags:
   - reliability
   - security
   - external/cwe/cwe-131
   - external/cwe/cwe-120
   - external/cwe/cwe-122
Query suites:
   - cpp-code-scanning.qls
   - cpp-security-extended.qls
   - cpp-security-and-quality.qls

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

此规则识别对 malloc 的调用,这些调用会调用 strlen 来确定所需的缓冲区大小,但不会为零终止符分配空间。

建议

突出显示的代码段创建了一个缓冲区,但未确保其足够大以容纳复制的数据。这使得代码容易受到缓冲区溢出攻击,这会导致从程序崩溃到恶意代码执行的任何后果。

将分配的缓冲区大小增加 1,或将 mallocstrcpy 对替换为对 strdup 的调用。

示例


void flawed_strdup(const char *input)
{
	char *copy;

	/* Fail to allocate space for terminating '\0' */
	copy = (char *)malloc(strlen(input));
	strcpy(copy, input);
	return copy;
}

参考资料

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