Чтение неверных данных из X: читаемый размер составляет Y байтов, но Z байты могут быть прочитаны - PullRequest
0 голосов
/ 14 июня 2019

Я обновил свой 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.Документация для предупреждения здесь .

1 Ответ

0 голосов
/ 27 июня 2019

Как прокомментировал Evg, похоже, это Visual Studio / Resharper C++ ошибка статического анализатора, так как код правильный.

...