Lançamento do cppcheck 2.6, um analisador de código estático para linguagens C++ e C

Foi lançada uma nova versão do analisador de código estático cppcheck 2.6, que permite identificar diversas classes de erros em código nas linguagens C e C++, inclusive ao utilizar sintaxe não padrão, típica de sistemas embarcados. É fornecida uma coleção de plug-ins por meio dos quais o cppcheck é integrado a vários sistemas de desenvolvimento, integração contínua e teste, e também fornece recursos como verificação da conformidade do código com o estilo do código. Para analisar o código, você pode usar seu próprio analisador ou um analisador externo do Clang. Também inclui o script donate-cpu.py para fornecer recursos locais para fazer trabalho colaborativo de revisão de código para pacotes Debian. O código fonte do projeto é distribuído sob a licença GPLv3.

O desenvolvimento do cppcheck está focado na identificação de problemas associados a comportamentos indefinidos e à utilização de estruturas perigosas do ponto de vista da segurança. O objetivo também é minimizar falsos positivos. Entre os problemas identificados: ponteiros para objetos inexistentes, divisões por zero, overflows de inteiros, operações incorretas de deslocamento de bits, conversões incorretas, problemas ao trabalhar com memória, uso incorreto de STL, desreferências de ponteiro nulo, uso de verificações após o acesso real para o buffer, buffer overruns, uso de variáveis ​​não inicializadas.

Na nova versão:

  • As seguintes verificações foram adicionadas ao núcleo do analisador:
    • ausência de operador de retorno no corpo da função;
    • registra dados sobrepostos, determina comportamento indefinido;
    • o valor que está sendo comparado está fora da representação de valor do tipo;
    • a otimização de cópia não se aplica a return std::move(local);
    • o arquivo não pode ser aberto simultaneamente para leitura e gravação em fluxos diferentes (stream);
  • para plataformas Unix, adicionado suporte para exibição de mensagens de diagnóstico em cores diferentes;
  • análise simbólica adicionada para ValueFlow. Usa delta simples ao calcular a diferença entre duas variáveis ​​desconhecidas;
  • as regras usadas para a lista de tokens "define" também podem corresponder a #include;
  • etiqueta da biblioteca agora pode conter uma tag e, consequentemente, as funções gratuitas, que podem aceitar contêineres como std::size, std::empty, std::begin, std::end, etc. pode especificar rendimento ou ação para conectores;
  • etiqueta da biblioteca agora pode conter uma tag para ponteiros inteligentes que possuem propriedade exclusiva. Agora é emitido um aviso sobre referências pendentes a esses tipos de ponteiros inteligentes;
  • problemas corrigidos com o processamento do parâmetro —cppcheck-build-dir;
  • htmlreport agora pode exibir informações sobre o autor (usando git culpa);
  • avisos estendidos sobre variáveis ​​que não são constantes, mas poderiam ser;
  • Os erros e deficiências acumulados do analisador foram corrigidos.

Além disso, as verificações do Misra C 2012, incluindo a Emenda 1 e a Emenda 2, foram totalmente implementadas, exceto para as regras 1.1, 1.2 e 17.3. As verificações 1.1 e 1.2 devem ser realizadas pelo compilador. A verificação 17.3 pode ser realizada por um compilador como o GCC.

Fonte: opennet.ru

Adicionar um comentário