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 energizados que têm energia suficiente para caminhadas tardias e códigos volumosos. O segundo lançamento do PVS-Studio 7.04 no verão foi bastante grande, por isso trazemos à sua atenção um comunicado de imprensa no qual falaremos sobre tudo.
O PVS-Studio é uma ferramenta para detectar erros e possíveis vulnerabilidades no código fonte de programas escritos em C, C ++, C # e Java. É executado no Windows, Linux e macOS.
Os recursos do analisador são bem demonstrados pela extensa
coleção de erros no código que encontramos durante a
verificação de vários projetos de código aberto.
Trazemos a sua atenção uma visão geral dos novos recursos incluídos no lançamento do PVS-Studio 7.04.
Pesquisar arquivos com licenças Copyleft
Desenvolvedores de onde eles simplesmente não obtêm o código, trabalhando na tarefa. Uma fonte popular para o código Copy-Paste é o site Stackoverflow e similares. Mas pode haver situações em que o programador pega o código do projeto Open Source e não verifica os requisitos de licença. Assim, vários arquivos do projeto Open Source com licença Copyleft, ou seja, obrigando a tornar público todo o código do projeto. Nas empresas com um grande número de funcionários, é difícil acompanhar e riscos e problemas podem ser graves devido a essas ações. Portanto, no PVS-Studio para todos os idiomas suportados (C, C ++, C #, Java), surgiram diagnósticos que ajudarão a encontrar esses arquivos.
Números de diagnóstico para diferentes idiomas:
Vamos nos aprofundar nesses diagnósticos com mais detalhes e analisar para que eles são feitos. Um exemplo de comentário no qual o analisador emitirá um aviso:
Para projetos fechados
Se você adicionar um arquivo com essa licença (GPL3 neste caso) a um projeto fechado, o restante do código-fonte precisará ser aberto, devido à natureza desta licença.
Esse tipo de licença copyleft é chamada de licença "
viral ", devido à sua capacidade de se espalhar para outros arquivos do projeto. O problema é que o uso de pelo menos um arquivo com uma licença semelhante em um projeto fechado abre automaticamente todo o código-fonte e obriga a distribuí-lo junto com os arquivos binários.
O Diagnostics procura pelas seguintes licenças "virais":
- AGPL-3.0
- GPL-2.0
- GPL-3.0
- LGPL-3.0
Existem as seguintes opções, o que você pode fazer quando descobrir o uso de arquivos com licença copyleft em um projeto fechado:
- Recuse-se a usar esse código (biblioteca) em seu projeto;
- Substitua a biblioteca usada;
- Faça seu projeto aberto.
Para projetos de código aberto
Entendemos que esse diagnóstico não é apropriado para projetos de código aberto. A equipe do PVS-Studio contribui para o desenvolvimento de projetos abertos, 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ê usar o plug-in PVS-Studio para Visual Studio, vá em Opções> PVS-Studio> Erros detectáveis> 1.Análise geral> V1042, você pode desativar a exibição desse diagnóstico na janela de saída do analisador. A desvantagem desse método é que o erro ainda será gravado no log do analisador quando ele for salvo (ou se a análise foi iniciada na linha de comando). Portanto, ao abrir esse log em outra máquina ou converter os resultados da análise em um formato diferente, as mensagens desabilitadas dessa maneira podem aparecer novamente.
- Se você não usar o plug-in, deseja bloquear a regra de todo o comando ou remover suas mensagens do relatório do analisador e adicionar o comentário "// - V :: 1042" ao arquivo de configuração (.pvsconfig) ou a um dos arquivos de cabeçalho global. Para desenvolvedores que usam o Visual C ++, uma boa opção seria adicionar esse comentário ao arquivo stdafx.h. Este comentário diz ao analisador para desativar o diagnóstico V1042. Para obter mais informações sobre como desativar o diagnóstico usando comentários, consulte a documentação .
- Se o utilitário Plog Converter for usado para converter relatórios, você poderá desativar o diagnóstico usando a opção "-d".
Para C #, significa V3144, respectivamente, e para Java - V6071.
Adicionando à lista de licenças perigosas
Se você também conhece os tipos de licenças "virais" que a ferramenta não detecta no momento, você pode nos contar sobre elas através do
formulário de feedback . E adicionaremos a identificação deles 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.
Também gostaria de mencionar o diagnóstico com o número
V1040 . Mesmo no status beta, ela já encontrou um erro interessante na biblioteca do conhecido projeto CMake:
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
Aqui eles fizeram um erro de digitação no nome
__MINGW32_ . No final, falta um sublinhado. Se você pesquisar por código com esse nome, verifique se o projeto realmente usa a versão com dois sublinhados nos dois lados:
Você pode ver todos os erros encontrados no projeto CMake no artigo "
CMake: o caso em que a qualidade do seu código é indesculpável ao projeto ".
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'.
Também no analisador C #, foi adicionado o cálculo dos valores de retorno / gravação dos métodos de acesso à propriedade get e set e métodos assíncronos.
Atualmente, estamos trabalhando para melhorar o rastreamento dos valores de campo e propriedades dos objetos ao transmiti-los aos métodos, bem como o rastreamento do conteúdo das tuplas. 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
Quase dois anos se passaram desde o último lançamento da versão LTS do SonarQube 6.7. Uma nova versão era esperada com zelo especial, começando com o SQ 7.x, e quando a versão LTS ocorreu, os usuários começaram a mudar ativamente para ela, o que causou vários problemas. O SQ 7.9.1 LTS foi lançado em breve com pequenas correções, e os desenvolvedores de plug-ins de terceiros também prepararam patches.
Felizmente, no plug-in PVS-Studio, havia apenas um pequeno problema associado à transição para o Java 11, que rapidamente corrigimos, e nossos clientes imediatamente mudaram para uma versão funcional.
Também mantivemos a compatibilidade com versões mais antigas do SonarQube, e a lista de versões suportadas agora se parece com isso:
SonarQube 6.7 LTS e superior .
Mais plugins de idiomas suportados
O plug-in PVS-Studio converte apenas os resultados da análise no formato do banco de dados SonarQube. Em outras palavras, ele simplesmente carrega os resultados da análise PVS-Studuio no SQ. Porém, para a operação completa do utilitário SonarScanner, plug-ins para linguagens de programação devem ser instalados. Não começamos a desenvolver o que já existe; portanto, simplesmente adicionamos suporte para 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 baixar os resultados da análise do PVS-Studio, basta instalar pelo menos um plugin desta lista. A maioria dos usuários precisa instalar apenas a Comunidade Sonar C ++, SonarC # ou SonarJava. Outros plugins podem ser necessários para projetos mais específicos.
Ao escolher plugins, é necessário levar em consideração o fato de que os plugins da Comunidade não são compatíveis com o SonarCFamily. Mas se você usar apenas o SonarQube Community Edition, esse problema não ocorrerá.
Nova página de configurações
Anteriormente, era possível configurar o analisador apenas por meio do arquivo de configuração
sonar-project.properties . Não há reclamações sobre esse método. É muito conveniente e é usado em 99% dos casos, mas também fizemos a página de configurações em
Administração> Configuração> PVS-Studio no servidor SonarQube, porque Também é conveniente usar em alguns cenários.
A página de configurações fica assim:
Ao definir as configurações de duas maneiras, é dada prioridade às especificadas no arquivo
sonar-project.properties .
Plugin para IntelliJ IDEA
As versões das novas versões do IntelliJ IDEA e PVS-Studio diferem em datas, e recentemente houve uma situação em que o IntelliJ IDEA 192. * foi lançado, mas o plug-in PVS-Studio não estava instalado nele. Nesta versão, adicionamos suporte para a versão mais recente do IntelliJ IDEA e também fizemos melhorias para evitar problemas semelhantes no futuro.
Plugins para Jenkins
PVS-Studio PluginO PVS-Studio Plugin destina-se à publicação 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, pois chamou o conversor de relatórios automaticamente e o fez apenas para Windows. No PVS-Studio 7.04, o plug-in suporta apenas relatórios HTML, que devem ser gerados em uma etapa separada, mas isso permitiu que o plug-in fosse multiplataforma.
Avisos NG PluginPara Jenkins, existe um
plug-in útil do
Warnings Next Generation Plugin para visualizar os resultados da análise de várias ferramentas. Recentemente, adicionamos suporte ao PVS-Studio nele. A capacidade de carregar os resultados da análise do PVS-Studio usando esse plug-in ficou disponível na versão
6.0.0 , cuja versão coincidiu com a versão do PVS-Studio 7.04:
Outras melhorias
PVS-Studio_CmdUm modo operacional especial - credenciais foram adicionadas ao
PVS-Studio_Cmd.exe . Esse modo permite criar um arquivo de configurações e inserir informações de licença sem usar uma interface GUI (por exemplo, um plug-in para Visual Studio ou a interface do usuário de monitoramento do compilador C e C ++ do utilitário). Esse modo é especialmente relevante quando usado no servidor de construção (onde os utilitários da GUI podem não ser descritos), em contêineres e quando integrado a soluções em nuvem.
Análise de projetos de motores irreaisNo plug-in PVS-Studio para Visual Studio, foi adicionada a opção
AutoloadUnrealEngineLog , cuja inclusão permite carregar automaticamente o relatório do analisador na janela de saída do PVS-Studio após a aprovação da análise. Sem essa opção, o carregamento do log deve ser feito manualmente através do menu do plug-in.
Além disso, na seção de documentação "
Testando projetos de mecanismo irreal ", foram descritas alterações nos scripts de montagem padrão que permitirão a montagem e a análise em uma ação. Sem modificar os scripts (ao incluir o
sinalizador -StaticAnalyzer = PVSStudio nos argumentos de inicialização), apenas o projeto é analisado, sem construí-lo.
CLMonitorPara o utilitário CLMonitor, foi adicionada a capacidade de rastrear lançamentos do compilador para um processo específico. Isso permitirá que você acompanhe o início dos compiladores relacionados apenas a um projeto específico, mesmo ao criar vários projetos em paralelo. Para trabalhar nesse modo, os sinalizadores
--parentProcessID% PID% (CLMonitor monitora processos filhos em relação ao especificado) e
--attach (CLMonitor monitora processos filhos em relação ao console atual) são usados.
analisador de estúdio pvsO
sinalizador --ignore-ccache foi adicionado ao utilitário
pvs-studio-analyzer , desenvolvido para testar projetos no Linux e macOS:
pvs-studio-analyzer analyze ... --ignore-ccache ...
Se o utilitário
ccache for usado na montagem do projeto, o PVS-Studio funcionará no modo de análise incremental. Para verificar o projeto completamente sem descartar o
cache do utilitário
ccache , use este sinalizador.
Sitelinks
Para acompanhar nossas novas publicações, convidamos você a se inscrever em:
- Twitter: pvsstudio_rus
- VKontakte: Analisador PVS-Studio
- Facebook: @StaticCodeAnalyzer
- Instagram: @pvsstudio_rus
- Telegrama: PVS-Studio rus
- RSS: viva64-blog-pt
PVS-Studio:
- Página do produto
- Baixar
- A documentação
- Clientes

Se você deseja compartilhar este artigo com um público que fala inglês, use o link para a tradução: Svyatoslav Razmyslov.
PVS-Studio 7.04 .