O verão não é apenas uma estação de férias, mas também um período de trabalho frutífero. Os dias ensolarados são tão inspiradores que há energia suficiente para caminhadas tardias e códigos grandes. O segundo lançamento de verão do PVS-Studio 7.04 foi bastante grande, por isso sugerimos a atenção deste comunicado de imprensa, no qual falaremos sobre tudo.
O PVS-Studio é uma ferramenta projetada para detectar erros e possíveis vulnerabilidades no código fonte dos programas, escritos em C, C ++, C #, Java. Funciona no ambiente Windows, Linux e macOS.
Uma extensa
coleção de erros encontrados no código durante as
verificações de vários projetos de código aberto demonstra claramente as habilidades do analisador.
Aqui está uma visão geral dos novos recursos que acompanham o lançamento do PVS-Studio 7.04.
Procurar arquivos com licenças Copyleft
Ao trabalhar em uma tarefa, os desenvolvedores usam o código de vários lugares. Uma fonte popular de código Copy-Paste é o site Stackoverflow e similares. Há casos em que um desenvolvedor pega o código de um projeto de código aberto e não verifica os requisitos de licença. Portanto, um projeto de código fechado pode obter acidentalmente alguns arquivos de um projeto de código aberto com uma licença Copyleft, o que obriga a tornar todo o código do projeto de código aberto. Nas empresas com um grande número de funcionários, é difícil acompanhar isso, enquanto essas ações podem causar riscos e problemas adversos. Portanto, o PVS-Studio agora possui um diagnóstico, o que ajudará a encontrar esses arquivos. Está relacionado a todas as linguagens suportadas (C, C ++, C #, Java).
Números de diagnóstico para diferentes idiomas:
Vamos examinar mais de perto esses diagnósticos e descobrir para que eles foram feitos. Um exemplo de comentário ao qual o analisador emitirá um aviso para:
Para projetos fechados
Se você adicionar um arquivo com essa licença (neste caso, GPL3) em um projeto fechado, será necessário abrir o código restante devido a detalhes dessa licença.
Esse tipo de licença é chamado de "
viral " devido à sua capacidade de se estender ao restante dos arquivos do projeto. O problema é que o uso de pelo menos um arquivo com essa licença em um projeto fechado automaticamente abre todo o código-fonte e obriga a distribuí-lo junto com os arquivos binários.
O diagnóstico está procurando as seguintes licenças de "vírus":
- AGPL-3.0
- GPL-2.0
- GPL-3.0
- LGPL-3.0
Aqui estão as opções do que você pode fazer caso detecte o uso de arquivos com uma licença copyleft em um projeto fechado:
- Evite usar esse código (biblioteca) em seu projeto;
- Substitua a biblioteca usada;
- Faça o projeto de código aberto.
Para projetos abertos
Entendemos que esse diagnóstico é inadequado para projetos de código aberto. A equipe do PVS-Studio contribui para o desenvolvimento de projetos de código aberto, ajuda a corrigir
erros neles e fornece
opções de licença gratuitas . No entanto, nosso produto é uma solução B2B e, portanto, esse diagnóstico é ativado por padrão.
Se o seu código for distribuído sob uma das licenças copyleft acima, você poderá desativar esse diagnóstico das seguintes maneiras (para C \ C ++, é a V1042):
- Se você estiver usando o plug-in PVS-Studio para Visual Studio, poderá desativar esse diagnóstico em Opções> PVS-Studio> Erros detectáveis> 1.Análise geral> V1042. Depois disso, não será mostrado no relatório do analisador. A desvantagem desse método é que o erro ainda será gravado no log do analisador ao salvá-lo (ou se a análise foi executada na linha de comando). Portanto, quando você abre esse log em outra máquina ou converte os resultados da análise em outro formato, as mensagens desabilitadas dessa maneira podem reaparecer.
- Se você não estiver usando o plug-in e quiser bloquear a regra para toda a equipe ou removê-la do relatório do analisador, poderá adicionar o comentário "// - V :: 1042" ao arquivo de configuração (.pvsconfig) ou para um dos arquivos de cabeçalho global. Para desenvolvedores que usam o Visual C ++, uma boa opção seria adicionar esse comentário no "stdafx.h". arquivo Este comentário diz ao analisador para desativar o diagnóstico V1042. A documentação fornece informações mais detalhadas sobre como desativar o diagnóstico usando os comentários.
- Se você estiver usando o utilitário Plog Converter para converter relatórios, poderá desativar o diagnóstico usando a tecla "-d".
Para C # V3144 é um número correspondente de um diagnóstico, V6071 - para Java.
Estendendo a lista de licenças perigosas
Caso você conheça outros tipos de licenças de "vírus" que o PVS-Studio não detecta nesse momento, informe-nos através do nosso formulário de feedback. Nós os adicionaremos no próximo lançamento.
Novos diagnósticos
C, C ++ (Geral)
- V1040 . Possível erro de digitação na ortografia de um nome de macro predefinido.
- V1041 . O membro da classe é inicializado com referência pendente.
- V1042 . Este arquivo está marcado com a licença copyleft, que requer que você abra o código-fonte derivado.
- V1043 . Uma variável de objeto global é declarada no cabeçalho. Várias cópias serão criadas em todas as unidades de conversão que incluem este arquivo de cabeçalho.
Gostaria de dar atenção especial ao diagnóstico com o número
V1040 . Conseguimos encontrar um erro interessante na biblioteca do conhecido projeto CMake, mesmo na fase beta:
V1040 Possível erro de digitação na ortografia de um nome de macro predefinido. A macro '__MINGW32_' é semelhante a '__MINGW32__'. winapi.h 4112
#if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif
Há um erro de digitação feito no nome
__MINGW32_ . No final, um caractere sublinhado está ausente. Se você pesquisar o código com esse nome, poderá ver que a versão com dois caracteres sublinhados nos dois lados é usada no projeto:
Você pode verificar todos os erros encontrados no projeto CMake no artigo: "
CMake: o caso em que a qualidade do projeto é imperdoável ".
C, C ++ (MISRA)
- V2551 . Misra. A variável deve ser declarada em um escopo que minimize sua visibilidade.
- V2552 . Misra. Expressões com tipo subjacente de enumeração devem ter valores correspondentes aos enumeradores da enumeração.
- V2553 . Misra. O operador menos unário não deve ser aplicado a uma expressão do tipo não assinado.
- V2554 . Misra. A expressão que contém incremento (++) ou decremento (-) não deve ter outros efeitos colaterais.
- V2555 . Misra. Expressão de deslocamento incorreta.
- V2556 . Misra. Use um ponteiro para FILE quando o fluxo associado já estiver fechado.
- V2557 . Misra. O operando do operador sizeof () não deve ter outros efeitos colaterais.
C #
- V3140 Os acessadores de propriedades usam diferentes campos de apoio.
- V3141 . A expressão em 'throw' é um potencial nulo, que pode levar a NullReferenceException.
- V3142 . Código inacessível detectado. É possível que haja um erro.
- V3143 . O parâmetro 'value' é reescrito dentro de um configurador de propriedades e não é usado depois disso.
- V3144 . Este arquivo está marcado com a licença copyleft, que requer que você abra o código-fonte derivado.
- V3145. Desreferenciação insegura de um destino WeakReference. O objeto poderia ter sido coletado como lixo antes do acesso à propriedade 'Target'.
Quanto ao analisador C #, adicionamos avaliação de valores de leitura / escrita de getters e setters de propriedades, bem como de métodos assíncronos.
Atualmente, estamos trabalhando no aprimoramento dos valores e propriedades dos objetos dos campos de monitoramento à medida que eles são transmitidos aos métodos, bem como no monitoramento do conteúdo dos turples. Essas melhorias estarão disponíveis na próxima versão do analisador.
Java
- V6068 Uso suspeito da classe BigDecimal.
- V6069 Atribuição de turno à direita não assinada com valor negativo de 'byte' / 'curto'.
- V6070 Sincronização insegura em um objeto.
- V6071 Este arquivo está marcado com a licença copyleft, que requer que você abra o código-fonte derivado.
SonarQube 7.9 LTS
Liberação há muito esperada
Já se passaram quase 2 anos desde o último lançamento da versão LTS do SonarQube 6.7. A nova versão era aguardada com muita expectativa, começando com o SQ 7.xe quando o LTS foi lançado, os usuários começaram a mudar ativamente para ele, o que causou vários problemas. Logo o SQ 7.9.1 LTS saiu com pequenas correções e os desenvolvedores de plug-ins de terceiros também fizeram correções.
Felizmente, o plug-in PVS-Studio teve apenas um problema, relacionado à mudança para o Java 11, que foi rapidamente corrigido e nossos clientes imediatamente mudaram para uma versão viável.
Também mantemos a compatibilidade com as versões antigas do SonarQube e a lista de versões suportadas agora tem a seguinte aparência:
SonarQube 6.7 LTS e posteriorPlugins de idiomas mais suportados
O plug-in PVS-Studio converte apenas os resultados da análise no formato do banco de dados SonarQube. Em outras palavras, ele apenas baixa os resultados da análise PVS-Studuio no SQ. Para que o utilitário SonarScanner funcione totalmente, é necessário ter plugins para linguagens de programação instalados. Como não começamos a desenvolver o que já existe, adicionamos suporte a plugins populares já existentes. Nesta versão, adicionamos compatibilidade com os plugins de idiomas Sonar C Community e SonarCFamily.
A lista inteira de plug-ins de idiomas suportados é assim:
Para fazer upload dos resultados da análise do PVS-Studio, basta instalar pelo menos um plug-in desta lista. A maioria dos usuários instala apenas a Comunidade Sonar C ++, SonarC # ou SonarJava. Os demais plugins podem ser necessários para projetos mais específicos.
Ao escolher plug-ins, considere o fato de que os plug-ins da comunidade não são compatíveis com o SonarCFamily. Mas se você usar apenas o SonarQube Community Edition, não haverá esse problema.
Nova página de configurações
Anteriormente, era possível configurar o analisador apenas através do arquivo de configuração
sonar-project.properties . Não há reclamações sobre esse método. É muito conveniente e é usado 99% do tempo, mas criamos uma página de configurações adicionais em
Administração> Configuração> PVS-Studio no lado do servidor do SonarQube, pois pode ser usado preferencialmente em alguns cenários.
A página de configurações fica assim:
Ao definir configurações de duas maneiras, as especificadas no arquivo
sonar-project.properties são da mais alta prioridade.
Plugin para IntelliJ IDEA
As versões das novas versões do IntelliJ IDEA e PVS-Studio diferem em datas. Recentemente, tivemos uma situação em que o IntelliJ IDEA 192. * foi lançado, mas o plug-in PVS-Studio não pôde ser instalado nele. Nesta versão, adicionamos suporte para as versões mais recentes do IntelliJ IDEA, além de aprimoramentos para evitar problemas semelhantes no futuro.
Plugins para jenkins
PVS-Studio PluginO PVS-Studio Plugin destina-se à publicação de relatórios dos resultados do analisador PVS-Studio no sistema de integração contínua Jenkins no formato HTML. Anteriormente, esse plug-in estava disponível apenas para usuários do Windows porque chamava o conversor de relatórios automaticamente e o fazia apenas para Windows. No PVS-Studio 7.04, o plug-in suporta apenas relatórios HTML que precisam ser gerados em uma única etapa, mas essa medida tornou o plug-in em várias plataformas.
Avisos NG PluginPara o Jenkins, existe um plug-in útil, o plug-in
Warnings Next Generation, para visualizar os resultados da análise de várias ferramentas. Adicionamos recentemente o suporte ao PVS-Studio. A capacidade de carregar os resultados da análise do PVS-Studio usando este plug-in ficou disponível no
6.0.0 ; sua versão coincidiu acidentalmente com a versão do PVS-Studio 7.04:
Outras melhorias
PVS-Studio_CmdO PVS-Studio_Cmd.exe agora possui um modo operacional especial - credenciais. Esse modo permite criar um arquivo de configurações e inserir informações de licença sem o uso de uma interface GUI (por exemplo, plug-in do Visual Studio ou utilitário de UI de monitoramento do compilador C e C ++). Esse modo é especialmente relevante quando usado em um servidor de construção (onde os utilitários da GUI podem estar ausentes), em contêineres, ao integrar-se com soluções em nuvem.
Análise de projetos de motores irreaisAdicionamos a opção
AutoloadUnrealEngineLog no plug-in PVS-Studio para Visual Studio, que permite carregar automaticamente o relatório do analisador na janela de saída do PVS-Studio após a análise. Sem essa opção, o log deve ser carregado manualmente através do menu do plug-in.
Além disso, a seção de documentação "
Análise de projetos do Unreal Engine " descreve as alterações dos scripts de construção padrão que permitem criar e analisar em uma ação. Sem modificações nos scripts (ao incluir o sinalizador
-StaticAnalyzer = PVSStudio para ativar argumentos), o projeto é analisado apenas, não construído.
CLMonitorPara o utilitário CLMonitor, adicionamos a capacidade de monitorar as execuções do compilador para um processo específico. Isso permitirá monitorar execuções do compilador, relacionadas apenas a um projeto específico, mesmo durante compilações paralelas de vários projetos. Para trabalhar nesse modo, os sinalizadores
--parentProcessID% PID% (o CLMonitor monitora processos relacionados ao filho com o especificado) e
--attach (CLMonitor monitora processos relacionados ao filho com um console atual) são usados.
analisador de estúdio pvsO sinalizador
--ignore-ccache é adicionado ao utilitário
pvs-studio-analyzer , que serve para verificar projetos no Linux e no macOS:
pvs-studio-analyzer analyze ... --ignore-ccache ...
Se o utilitário
ccache for usado em uma construção de projeto, o PVS-Studio estará operando no modo de análise incremental. Para verificar o projeto inteiro sem redefinir o cache do utilitário
ccache , escolha este sinalizador.
Links adicionais
Inscreva-se para ser informado sobre nossas novas publicações:
- Twitter: @Code_Analysis
- Youtube: PVS-Studio
- Facebook: @StaticCodeAnalyzer
- Instagram: @pvsstudio
- Telegrama: PVS-Studio
- RSS: viva64-blog-pt
PVS-Studio:
- Página do produto PVS-Studio
- Baixar
- Documentação
- Clientes