PVS-Studio: V641 - ложное срабатывание для структур WIN API

Предполагается, что последний элемент WCHAR Name[1] является строкой. Это известная техника.

// c:\Program Files (x86)\Windows Kits\8.0\Include\um\DbgHelp.h

typedef struct _SYMBOL_INFOW {
    ULONG       SizeOfStruct;
    ULONG       TypeIndex;        // Type Index of symbol
    ULONG64     Reserved[2];
    ULONG       Index;
    ULONG       Size;
    ULONG64     ModBase;          // Base Address of module comtaining this symbol
    ULONG       Flags;
    ULONG64     Value;            // Value of symbol, ValuePresent should be 1
    ULONG64     Address;          // Address of symbol including base address of module
    ULONG       Register;         // register holding value or pointer to value
    ULONG       Scope;            // scope of the symbol
    ULONG       Tag;              // pdb classification
    ULONG       NameLen;          // Actual length of name
    ULONG       MaxNameLen;
    WCHAR       Name[1];          // Name of symbol
} SYMBOL_INFOW, *PSYMBOL_INFOW;

Но следующий код генерирует V641. Почему?

PSYMBOL_INFOW pSym = NULL;
pSym = (PSYMBOL_INFOW) malloc(sizeof(SYMBOL_INFOW) + MAX_SYM_NAME);

person Dmitry Sokolov    schedule 27.04.2017    source источник


Ответы (1)


Благодарим вас за интерес к нашему продукту и проблемы, которые вы описали. Мы изучим предоставленные фрагменты кода и постараемся исправить эти проблемы.

person AndreyKarpov    schedule 28.04.2017
comment
Мы исправили это ложное срабатывание. Исправление будет доступно в следующем релизе PVS-Studio. - person AndreyKarpov; 11.05.2017