我最近使用 HP fortify 对我正在处理的项目进行了代码扫描。 它报告说我对 ReadFile 有一个严重的问题。 我从不传递空缓冲区。 有关如何解决潜在缓冲区溢出问题的任何建议。
摘要
serialport.cpp 中的函数 Read() 可能能够在第 225 行的已分配内存边界之外写入,这可能会损坏数据、导致程序崩溃或导致恶意代码的执行。
DWORD serialport::Read(std::vector<char> & buffer)
{
DWORD read = 0;
int val = ReadFile(h, &buffer[0], buffer.size(), &read, NULL);
if (val == 0)
{
LPCSTR ptr = "";
PrintError(ptr);
}
buffer.resize(read);
return read;
}
最佳答案
I never pass an empty buffer
但有一天可能会有其他人。您错误地在了解函数外部所做的事情的情况下评估函数内部的代码。该函数可以传递一个空的std::vector<char> &
。 .总有一天,它会。处理那个案子。
关于c++ - 我该如何解决这个缓冲区溢出问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48079483/