# V543. It is suspicious that value 'X' is assigned to the variable 'Y' of HRESULT type.

Анализатор обнаружил потенциальную ошибку при работе с переменной типа HRESULT.

HRESULT — это 32-разрядное значение, разделенное на три различных поля: код серьезности ошибки, код устройства и код ошибки. Для работы со значением HRESULT служат специальные константы, такие как S_OK, E_FAIL, E_ABORT и так далее. А для проверки значений тип HRESULT предназначены такие макросы как SUCCEEDED, FAILED.

Предупреждение V543 выдается в том случае, если в переменную типа HRESULT пытаются записать значение -1, true или false. Рассмотрим пример:

    HRESULT h;
    ...
    if (bExceptionCatched)
    {
      ShowPluginErrorMessage(pi, errorText);
      h = -1;
    }

Запись значения "-1" некорректна. Если хочется сообщить о какой-то непонятной ошибке, то следует использовать значение 0x80004005L (Unspecified failure). Эта и аналогичные константы, описаны в "WinError.h". Корректный код:

    if (bExceptionCatched)
    {
      ShowPluginErrorMessage(pi, errorText);
      h = E_FAIL;
    }

Дополнительные ресурсы:

- MSDN. Common HRESULT Values.
- Wikipedia. HRESULT.

Данная диагностика классифицируется как:

CWE-704

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V543.