PVS-Studio 7.04

Cuadro 4

El verano no es solo una temporada de vacaciones, sino también un tiempo de trabajo fructífero. Los días soleados son tan inspiradores que hay suficiente energía tanto para caminatas tardías como para grandes compromisos de código. El segundo lanzamiento de verano de PVS-Studio 7.04 resultó ser bastante grande, por lo que le sugerimos este comunicado de prensa, en el que le informaremos sobre todo.

PVS-Studio es una herramienta diseñada para detectar errores y vulnerabilidades potenciales en el código fuente de los programas, escritos en C, C ++, C #, Java. Funciona en entornos Windows, Linux y macOS.

Una extensa colección de errores encontrados en el código durante las comprobaciones de varios proyectos de código abierto demuestra claramente las capacidades del analizador.

Aquí hay una descripción general de las nuevas características que vienen con la versión PVS-Studio 7.04.

Buscar archivos con licencias Copyleft


Al trabajar en una tarea, los desarrolladores toman código de tantos lugares diferentes. Una fuente popular de código Copy-Paste es el sitio web de Stackoverflow y otros similares. Hay casos en que un desarrollador toma el código de un proyecto de código abierto y no verifica los requisitos de licencia. Por lo tanto, un proyecto de código cerrado puede obtener accidentalmente algunos archivos de un proyecto de código abierto con una licencia Copyleft, que obliga a que todo el código del proyecto sea de código abierto. En las empresas con una gran cantidad de empleados, es difícil hacer un seguimiento de esto, mientras que tales acciones pueden causar riesgos y problemas adversos. Entonces, PVS-Studio ahora tiene un diagnóstico, que ayudará a encontrar dichos archivos. Se relaciona con todos los lenguajes compatibles (C, C ++, C #, Java).

Números de diagnóstico para diferentes idiomas:


Echemos un vistazo más de cerca a estos diagnósticos y descubramos para qué están hechos. Un ejemplo de un comentario que el analizador emitirá una advertencia para:

/* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ 

Para proyectos cerrados


Si agrega un archivo con dicha licencia (en este caso, GPL3) en un proyecto cerrado, tendrá que abrir el código de descanso debido a los detalles de esta licencia.

Este tipo de licencias se llama " viral " debido a su capacidad de extenderse al resto de los archivos del proyecto. El problema es que el uso de al menos un archivo con dicha licencia en un proyecto cerrado abre automáticamente todo el código fuente y obliga a distribuirlo junto con los archivos binarios.

El diagnóstico está buscando las siguientes licencias de "virus":

  • AGPL-3.0
  • GPL-2.0
  • GPL-3.0
  • LGPL-3.0

Estas son las opciones de lo que puede hacer en caso de que detecte el uso de archivos con una licencia copyleft en un proyecto cerrado:

  1. Abstenerse de usar dicho código (biblioteca) en su proyecto;
  2. Sustituir la biblioteca utilizada;
  3. Haz que el proyecto sea de código abierto.

Para proyectos abiertos


Entendemos que este diagnóstico es inapropiado para proyectos de código abierto. El equipo de PVS-Studio contribuye al desarrollo de proyectos de código abierto, ayuda a corregir errores en ellos y proporciona opciones de licencia gratuitas . Sin embargo, nuestro producto es una solución B2B y, por lo tanto, este diagnóstico está habilitado de forma predeterminada.

Si su código se distribuye bajo una de las licencias copyleft anteriores, puede deshabilitar este diagnóstico de las siguientes maneras (para C \ C ++ es V1042):

  • Si está utilizando el complemento PVS-Studio para Visual Studio, puede deshabilitar este diagnóstico yendo a Opciones> PVS-Studio> Errores detectables> 1. Análisis general> V1042. Después de esto, no se mostrará en el informe del analizador. La desventaja de este método es que el error aún se escribirá en el registro del analizador al guardarlo (o si el análisis se ejecutó desde la línea de comandos). Por lo tanto, cuando abre dicho registro en otra máquina o convierte los resultados del análisis a otro formato, los mensajes que se deshabilitaron de esta manera pueden reaparecer.
  • Si no está utilizando el complemento y desea bloquear la regla para todo el equipo, o eliminarla del informe del analizador, puede agregar el comentario "// - V :: 1042" al archivo de configuración (.pvsconfig) o a uno de los archivos de encabezado global. Para los desarrolladores, que usan Visual C ++, una buena opción sería agregar este comentario en "stdafx.h". archivo. Este comentario le dice al analizador que desactive el diagnóstico V1042. La documentación brinda información más detallada sobre cómo deshabilitar los diagnósticos mediante los comentarios.
  • Si está utilizando la utilidad Plog Converter para convertir informes, puede deshabilitar el diagnóstico con la tecla "-d".

Para C # V3144 es un número correspondiente de un diagnóstico, V6071, para Java.

Ampliación de la lista de licencias peligrosas


En caso de que conozca otros tipos de licencias de "virus" que PVS-Studio no detecta en este momento, puede informarnos a través de nuestro formulario de comentarios. Los agregaremos en la próxima versión.

Nuevos diagnósticos


C, C ++ (general)


  • V1040 . Posible error tipográfico en la ortografía de un nombre de macro predefinido.
  • V1041 . El miembro de la clase se inicializa con una referencia colgante.
  • V1042 . Este archivo está marcado con licencia copyleft, que requiere que abra el código fuente derivado.
  • V1043 . Una variable de objeto global se declara en el encabezado. Se crearán varias copias en todas las unidades de traducción que incluyen este archivo de encabezado.

Me gustaría prestar especial atención al diagnóstico con el número V1040 . Logramos encontrar un error interesante en la biblioteca del conocido proyecto CMake incluso en la etapa beta:

V1040 Posible error tipográfico en la ortografía de un nombre de macro predefinido. La macro '__MINGW32_' es similar a '__MINGW32__'. winapi.h 4112

 /* from winternl.h */ #if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif 

Hay un error tipográfico hecho en el nombre __MINGW32_ . Al final, falta un carácter subrayado. Si busca el código con este nombre, puede ver que la versión con dos caracteres subrayados en ambos lados se utiliza en el proyecto:

Cuadro 8

Puede consultar todos los errores encontrados en el proyecto CMake en el artículo: " CMake: el caso cuando la calidad del proyecto es imperdonable ".

C, C ++ (MISRA)


  • V2551 . Misra La variable debe declararse en un ámbito que minimice su visibilidad.
  • V2552 . Misra Las expresiones con el tipo subyacente enum deben tener valores correspondientes a los enumeradores de la enumeración.
  • V2553 . Misra El operador unario menos no debe aplicarse a una expresión del tipo sin signo.
  • V2554 . Misra La expresión que contiene incremento (++) o decremento (-) no debería tener otros efectos secundarios.
  • V2555 . Misra Expresión de desplazamiento incorrecta.
  • V2556 . Misra Uso de un puntero a ARCHIVO cuando la secuencia asociada ya se ha cerrado.
  • V2557 . Misra El operador del operador de sizeof () no debería tener otros efectos secundarios.

C #


  • V3140 Los accesos de propiedad utilizan diferentes campos de respaldo.
  • V3141 . La expresión bajo 'throw' es un nulo potencial, que puede conducir a NullReferenceException.
  • V3142 . Código inalcanzable detectado. Es posible que haya un error presente.
  • V3143 . El parámetro 'valor' se reescribe dentro de un establecedor de propiedades, y no se usa después de eso.
  • V3144 . Este archivo está marcado con licencia copyleft, que requiere que abra el código fuente derivado.
  • V3145. Desreferencia insegura de un objetivo WeakReference. El objeto podría haberse recolectado como basura antes de acceder a la propiedad 'Destino'.

En cuanto al analizador C #, agregamos la evaluación de los valores leídos \ escritos de los captadores y establecedores de propiedades, así como de los métodos asíncronos.

Actualmente estamos trabajando para mejorar el monitoreo de los valores de los campos y las propiedades de los objetos a medida que se pasan a los métodos, así como el monitoreo del contenido de las torres. Estas mejoras estarán disponibles en la próxima versión del analizador.

Java


  • V6068 Uso sospechoso de la clase BigDecimal.
  • V6069 Asignación de desplazamiento a la derecha sin signo del valor negativo 'byte' / 'short'.
  • V6070 Sincronización insegura en un objeto.
  • V6071 Este archivo está marcado con licencia copyleft, que requiere que abra el código fuente derivado.

SonarQube 7.9 LTS


Lanzamiento tan esperado


Han pasado casi 2 años desde el último lanzamiento de la versión LTS de SonarQube 6.7. Se esperaba ansiosamente la nueva versión comenzando con el SQ 7.xy cuando se lanzó LTS, los usuarios comenzaron a cambiarlo activamente, lo que causó varios problemas. Pronto, SQ 7.9.1 LTS salió con correcciones menores y los desarrolladores de complementos de terceros también hicieron parches.

Afortunadamente, el complemento PVS-Studio solo tenía un problema, relacionado con el cambio a Java 11, que se solucionó rápidamente y nuestros clientes cambiaron inmediatamente a una versión viable.

También se mantiene la compatibilidad con las versiones antiguas de SonarQube y la lista de versiones compatibles ahora se ve de la siguiente manera: SonarQube 6.7 LTS y posterior

Complementos de idiomas más compatibles


El complemento PVS-Studio solo convierte los resultados del análisis al formato de la base de datos SonarQube. En otras palabras, solo descarga los resultados del análisis PVS-Studuio en SQ. Para que la utilidad SonarScanner funcione completamente, debe tener instalados complementos para los lenguajes de programación. No comenzamos a desarrollar lo que ya existe, por lo que solo agregamos compatibilidad con complementos populares ya existentes. En esta versión, hemos agregado compatibilidad con los complementos de lenguaje Sonar C Community y SonarCFamily.

La lista completa de complementos de idiomas compatibles se ve así:


Para cargar los resultados del análisis PVS-Studio es suficiente instalar al menos un complemento de esta lista. La mayoría de los usuarios instalan solo Sonar C ++ Community, SonarC # o SonarJava. El resto de complementos pueden ser necesarios para proyectos más específicos.

Al elegir complementos, tenga en cuenta el hecho de que los complementos de la comunidad no son compatibles con SonarCFamily. Pero si usa solo SonarQube Community Edition, no habrá tal problema.

Nueva página de configuración


Anteriormente, se podía configurar el analizador solo a través del archivo de configuración sonar-project.properties . No hay quejas sobre este método. Es muy conveniente y se usa el 99% del tiempo, pero hemos creado una página de configuración adicional en Administración> Configuración> PVS-Studio en el lado del servidor de SonarQube, ya que puede usarse preferiblemente para algunos escenarios.

La página de configuración se ve así:

Cuadro 10

Al establecer configuraciones de dos maneras, las especificadas en el archivo sonar-project.properties son de máxima prioridad.

Plugin para IntelliJ IDEA


Los lanzamientos de las nuevas versiones IntelliJ IDEA y PVS-Studio difieren en fechas. Recientemente hemos tenido una situación en la que se lanzó IntelliJ IDEA 192. * pero no se pudo instalar el complemento PVS-Studio. En esta versión, hemos agregado soporte para las últimas versiones de IntelliJ IDEA, así como mejoras para evitar problemas similares en el futuro.

Complementos para jenkins


PVS-Studio Plugin

PVS-Studio Plugin está diseñado para publicar informes de los resultados del analizador PVS-Studio en el sistema de integración continua Jenkins en formato HTML. Anteriormente, este complemento solo estaba disponible para usuarios de Windows porque llamaba al convertidor de informes automáticamente y solo lo hacía para Windows. En PVS-Studio 7.04, el complemento solo admite informes HTML que deben generarse en un solo paso, pero esta medida hizo que el complemento sea multiplataforma.

Advertencias NG Plugin

Para Jenkins, hay un complemento útil Warnings Next Generation Plugin para ver los resultados de análisis de varias herramientas. Recientemente hemos agregado soporte para PVS-Studio. La capacidad de cargar los resultados del análisis PVS-Studio usando este complemento se hizo disponible en 6.0.0 , su lanzamiento coincidió accidentalmente con el lanzamiento de PVS-Studio 7.04:

Imagen 1

Otras mejoras


PVS-Studio_Cmd

PVS-Studio_Cmd.exe ahora tiene un modo operativo especial: credenciales. Este modo le permite crear un archivo de configuración e ingresar información de licencia sin usar una interfaz GUI (por ejemplo, el complemento de Visual Studio o la utilidad de UI de monitoreo de compilador C y C ++). Este modo es especialmente relevante cuando se usa en un servidor de compilación (donde las utilidades GUI pueden estar ausentes), en contenedores, cuando se integra con soluciones en la nube.

Análisis de proyectos de motor irreal

Agregamos la opción AutoloadUnrealEngineLog en el complemento PVS-Studio para Visual Studio que le permite cargar automáticamente el informe del analizador en la ventana de salida de PVS-Studio después del análisis. Sin esta opción, el registro debe cargarse manualmente a través del menú del complemento.

Además, la sección de documentación " Análisis de proyectos de Unreal Engine " describe los cambios de los scripts de compilación estándar que le permiten compilar y analizar en una sola acción. Sin modificaciones en los scripts (al agregar el indicador -StaticAnalyzer = PVSStudio para iniciar argumentos), el proyecto solo se analiza, no se construye.

CLMonitor

Para la utilidad CLMonitor, hemos agregado la capacidad de monitorear las ejecuciones del compilador para un proceso específico. Esto le permitirá supervisar las ejecuciones del compilador, relacionadas solo con un proyecto específico, incluso durante las compilaciones paralelas de varios proyectos. Para trabajar en este modo, se utilizan los indicadores --parentProcessID% PID% (CLMonitor supervisa los procesos relacionados con el hijo del especificado) y --attach (CLMonitor supervisa los procesos relacionados con el hijo en una consola actual).

pvs-studio-analyzer

El indicador --ignore-ccache se agrega en la utilidad pvs-studio-analyzer , que está diseñada para verificar proyectos en Linux y macOS:

 pvs-studio-analyzer analyze ... --ignore-ccache ... 

Si la utilidad ccache se usa en la construcción de un proyecto, PVS-Studio está operando en el modo de análisis incremental. Para verificar todo el proyecto sin restablecer el caché de la utilidad ccache , elija este indicador.

Enlaces adicionales


Suscríbase para recibir información sobre nuestras nuevas publicaciones:

  1. Twitter: @Code_Analysis
  2. Youtube: PVS-Studio
  3. Facebook: @StaticCodeAnalyzer
  4. Instagram: @pvsstudio
  5. Telegrama: PVS-Studio
  6. RSS: viva64-blog-es

PVS-Studio:

  1. Página del producto PVS-Studio
  2. Descargar
  3. Documentación
  4. Clientes

Source: https://habr.com/ru/post/466195/


All Articles