c - 此函数不能正确处理以非 NULL 结尾的字符串

标签 c sonarqube embedded code-analysis

我使用带有 sonar.cxx 插件的 SonarCube 对我的嵌入式 C 代码进行了代码分析。

我还用 sonarcube 解析用 Rough Auditing Tool for Security (RATS) 生成的 XML我得到这个错误:

This function does not properly handle non-NULL terminated strings. This does not result in exploitable code, but can lead to access violations.

这是产生上述错误的代码:

  if( (machineMarket == NULL) || (strlen(machineMarket) > VALUE_MARKET_MAX_LEN) )

处理非 NULL 终止字符串的最佳做法是什么?

最佳答案

审计工具发出警告,调用 strlen 将继续读取字节,直到找到零字节。如果 machineMarket 的内容不包含零,则 strlen 可能会继续读取合法内存的末尾并导致访问冲突。

你说你是这样声明变量的
char machineMarket[VALUE_MARKET_MAX_LEN + 1];
所以你可以使用strnlen函数来确保你永远不会读得太远,或者使用@Zan Lynx 的方法在最后强制插入一个0。

无论使用哪种方法,您都可能需要处理原始字符串终止/未终止的情况。

关于c - 此函数不能正确处理以非 NULL 结尾的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44203332/

相关文章:

c - 如何区分文件指针指向的是文件还是目录?

sonarqube - 在 Gitlab README.md 中使用 SonarQube 徽章中的 Gitlab 变量

java - Sonar 规则定义 XML 格式

networking - 如何远程控制嵌入式设备

embedded - STM32 SPI驱动接收数据一直为0

C 链表显示内容

c - fscanf 跳过我的第一个字符

embedded - 使用 EXTI 线进行软件中断

c - 理解C中的scanf()(段错误)

jenkins - 分析成功但加载失败