【发布时间】:2019-07-12 04:07:12
【问题描述】:
Coverity 声称 getenv 正在返回一个受污染的字符串,我已经用尽了所有关于返回值检查的想法。我查看了与我类似的其他问题,但没有一个对我有用。
我尝试过检查返回值是否为 NULL,我尝试过 strdup、strncpy、memcpy,但似乎没有任何东西可以让受污染的字符串消失。
这里是没有检查无效的原始代码:
void my_func()
{
for(int port = 0; port < NUM_PORTS; port++) {
download_id_table(port,getenv("ID_FILE")); //tainted string from getenv
}
download_info(getenv("INFO_FILE")); //tainted string from getenv
//...
}
关于如何让 Coverity 相信它不再受到污染有什么想法吗?
【问题讨论】:
-
getenv的返回值被“污染”,因为它返回用户定义的数据。用户可以定义环境变量。您的程序无法控制该值,因此应该实施健全性检查。