# V5001. OWASP. It is highly probable that the semicolon ';' is missing after 'return' keyword.

Анализатор обнаружил фрагмент кода, в котором возможно пропущена точка с запятой ';'.

Пример кода, который приводит к выдаче диагностического сообщения V5001:

    void Foo();

    void Foo2(int *ptr)
    {
      if (ptr == NULL)
        return
      Foo();
      ...
    }

В данном коде планировалось завершить работу функции, если указатель ptr == NULL. Однако, после оператора return забыта точка с запятой ';', что приводит к вызову функции Foo(). Функция Foo() и Foo2() ничего не возвращают и поэтому данный код компилируется без ошибок и предупреждений.

Скорее всего, программист планировал написать:

    void Foo();

    void Foo2(int *ptr)
    {
      if (ptr == NULL)
        return;
      Foo();
      ...
    }

Если изначальный код все-таки корректен, то его лучше переписать следующим образом:

    void Foo2(int *ptr)
    {
      if (ptr == NULL)
      {
        Foo();
        return;
      }
      ...
    }

Анализатор считает код безопасным, если отсутствует оператор "if" или вызов функции находится на той же строке, что и оператор "return". Такой код достаточно часто можно встретить в программах. Примеры безопасного кода:

    void CPagerCtrl::RecalcSize()
    {
      return
        (void)::SendMessageW((m_hWnd), (0x1400 + 2), 0, 0);
    }

    void Trace(unsigned int n, std::string const &s)
      { if (n) return TraceImpl(n, s); Trace0(s); }

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

CWE-841 OWASP-11.1.1