从 'atoi' 收到未经验证的整数值
Unvalidated integer value is received from 'atoi'
对于以下代码,klocwork 报告未验证的整数值 'val' 从 'atoi' 收到,可用于访问数组
int main(int argc, char **argv)
{
int i = 0;
int val = 0;
for (i = 0; i < argc; i++)
{
if (argv[i])
{
val = atoi(argv[i]);
......
......
}
}
return 0;
}
我不知道如何解决这个问题。如果 argv[i] 不是数字,则 atoi 将 return 0。klocwork 在这里期待什么?
这是警告您稍后在代码中使用受污染的值访问数组。在这里查看如何修复它。
https://developer.klocwork.com/documentation/en/insight/10-1/sv-tainted-call-indexaccess
您获得的任何输入都需要在使用前以某种方式进行验证。
嗯,这里第一个明显的建议是:停止使用 atoi
。 atoi
用于草图,而不是用于实际代码。 atoi
没有任何失败反馈机制,并在溢出时产生未定义的行为。来自 ato...
组的函数已在 C95 中半官方半废弃。从那一刻起,他们一直只是为了向后兼容而跟着一起走。我不知道为什么它们仍然没有被正式弃用。
您想将字符串转换为整数 - 使用 strtol
并记住通过分析 errono
and/or 和 return 值来检查错误。而且,正如已经建议的那样,如果您使用结果值作为数组索引,那么确保索引在适当的范围。
atoi 定义为:
int atoi (const char *nPtr) /*convert the string nPtr to int*/
您必须记住,如果转换后的值不能表示为 int。 atoi 函数行为将是 undefinned(谨慎使用)。
已更新
如果转换后的值超出相应return类型的范围,则return值未定义。如果不能进行转换, 0 是 returned.
对于以下代码,klocwork 报告未验证的整数值 'val' 从 'atoi' 收到,可用于访问数组
int main(int argc, char **argv)
{
int i = 0;
int val = 0;
for (i = 0; i < argc; i++)
{
if (argv[i])
{
val = atoi(argv[i]);
......
......
}
}
return 0;
}
我不知道如何解决这个问题。如果 argv[i] 不是数字,则 atoi 将 return 0。klocwork 在这里期待什么?
这是警告您稍后在代码中使用受污染的值访问数组。在这里查看如何修复它。
https://developer.klocwork.com/documentation/en/insight/10-1/sv-tainted-call-indexaccess
您获得的任何输入都需要在使用前以某种方式进行验证。
嗯,这里第一个明显的建议是:停止使用 atoi
。 atoi
用于草图,而不是用于实际代码。 atoi
没有任何失败反馈机制,并在溢出时产生未定义的行为。来自 ato...
组的函数已在 C95 中半官方半废弃。从那一刻起,他们一直只是为了向后兼容而跟着一起走。我不知道为什么它们仍然没有被正式弃用。
您想将字符串转换为整数 - 使用 strtol
并记住通过分析 errono
and/or 和 return 值来检查错误。而且,正如已经建议的那样,如果您使用结果值作为数组索引,那么确保索引在适当的范围。
atoi 定义为:
int atoi (const char *nPtr) /*convert the string nPtr to int*/
您必须记住,如果转换后的值不能表示为 int。 atoi 函数行为将是 undefinned(谨慎使用)。
已更新
如果转换后的值超出相应return类型的范围,则return值未定义。如果不能进行转换, 0 是 returned.