我有一个像一样定义的char数组
char buffer[100];
当我运行Flawfinder
扫描命中率时,我得到的是:
(buffer) char:
Statically-sized arrays can be improperly restricted, leading to potential
overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use
functions that limit length, or ensure that the size is larger than the
maximum possible length.
我知道我必须在需要时进行检查,以确保我的代码不会出现异常,但我们有什么办法解决这个问题吗(用其他方式定义一个char数组(,并使Flawfindr
输出没有任何命中?
更新
以下是该功能的完整代码,以防对有帮助
std::string MyClass::randomGenerator(odb::nullable<int> maxLength) {
struct timeval tmnow;
struct tm *tm;
char buf[100];
gettimeofday(&tmnow, NULL);
tm = localtime(&tmnow.tv_sec);
strftime(buf, 100, "%m%d%H%M%S", tm);
string micro = std::to_string(((int)tmnow.tv_usec / 10000));
strlcat(buf, micro.c_str(), sizeof(buf));
std::stringstream stream;
stream << std::hex << stoll(buf);
std::string result(stream.str());
Utilities::find_and_replace(result, "0", "h");
Utilities::find_and_replace(result, "1", "k");
std::transform(result.begin(), result.end(),result.begin(), ::toupper);
if (maxLength) {
return result.substr(result.size() - maxLength.get(), result.size() - 1);
} else {
return result ;
}
}
Flawfinder确实是一个稍微有点美化的grep——它不是一个真正的静态分析工具,可以进行数据流分析,所以我一直对它的输出持谨慎态度!
真正应该编写此代码的方法是编写真正的C++代码,而不是使用C运行时函数来美化C,因为这些函数绝对会出现内存损坏问题。