c++ - 从 X : The readable size is Y bytes, 读取无效数据但可能读取 Z 字节

标签 c++ windows visual-studio gdi+

我将我的 Visual Studio 2019 更新到 16.1.3 版本,现在我在基于 GDI+ 库的函数中收到警告获取编码器:

inline int get_encoder(const WCHAR* format, CLSID* p_clsid)
{
    UINT image_encoders_count = 0;
    UINT image_encoder_array_size = 0;

    GetImageEncodersSize(&image_encoders_count, &image_encoder_array_size);
    if (image_encoder_array_size == 0)
    {
        return -1; // Failure
    }

    const auto p_image_codec_info = static_cast<ImageCodecInfo*>(malloc(image_encoder_array_size));
    if (p_image_codec_info == nullptr)
    {
        return -1; // Failure
    }

    GetImageEncoders(image_encoders_count, image_encoder_array_size, p_image_codec_info);

    for (UINT image_encoder_index = 0; image_encoder_index < image_encoders_count; image_encoder_index++)
    {
        // TODO: Fix the warning "Reading invalid data from 'p_image_codec_info':  the readable size is 'image_encoder_array_size' bytes, but '208' bytes may be read."
        const auto image_codec_info = p_image_codec_info[image_encoder_index];
        const auto mime_type = image_codec_info.MimeType;
        const auto comparison_result = wcscmp(mime_type, format);
        if (comparison_result == 0)
        {
            *p_clsid = image_codec_info.Clsid;
            free(p_image_codec_info);
            return image_encoder_index; // Success
        }
    }

    free(p_image_codec_info);
    return -1; // Failure
}

Visual Studio 产生以下警告:

Reading invalid data from 'p_image_codec_info':  the readable size is 'image_encoder_array_size' bytes, but '208' bytes may be read.

代码有效,但如何修复此警告?我逐步调试了代​​码,但没有发现索引或 p_image_codec_info 的分配大小有问题。警告的文档是 here .

最佳答案

正如 Evg 评论的那样, 这似乎是一个 Visual Studio/Resharper C++静态分析器错误,因为代码是正确的。

关于c++ - 从 X : The readable size is Y bytes, 读取无效数据但可能读取 Z 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56596885/

相关文章:

c++ - 如果头文件已经包含在预编译头文件中,我是否应该继续在我的源文件中包含头文件?

C++ 原子列表容器

c++ - std::function operator() 和 std::forward 发生了什么?

Python:使用 % 后清理 Windows 磁盘的脚本

windows - Delphi Windows服务设计

html - 更改 Visual Studio 2008 HTML 缩进样式

java - 使用 JNI 将图像从 Java 传递到 C++

windows - 安装 plesk 11 后安装 .net Framework 4

c++ - Visual Studio 2017 C++ : Missing includes on cloned git repository

visual-studio - javascript Visual Studio 2013 缩进