c++ - 我该如何解决这个缓冲区溢出问题?

标签 c++ winapi stdvector

我最近使用 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/

相关文章:

c++ - 使用算法删除 vector 中的特定元素

java - Tomcat Windows 服务 (Apache Commons procsrv) "The user name or password is incorrect"

winapi - 隐藏 MFC 对话窗口

c++ - 为什么我在递归删除目录时遇到问题?

c++ - 创建没有复制构造函数的std::vectors的std::vector

c++ - 不能将 std::vector<T> 转换为 std::initializer_list<T> 吗?

c++ - OpenSSL 摘要 : different results on command-line and in c++

c++ - c++中的字符串模板参数

c++ - STL 重载 vector 赋值

c++ - 如何为 main() 中的所有 for 循环构建一个类(只是为了减少主函数中的代码)