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 tienen tanta energ铆a que tienen suficiente energ铆a para las caminatas tard铆as y los voluminosos compromisos de c贸digo. El segundo lanzamiento de verano de PVS-Studio 7.04 result贸 ser bastante grande, por lo que le presentamos un comunicado de prensa en el que hablaremos de todo.

PVS-Studio es una herramienta para detectar errores y vulnerabilidades potenciales en el c贸digo fuente de programas escritos en C, C ++, C # y Java. Se ejecuta en Windows, Linux y macOS.

Las capacidades del analizador est谩n bien demostradas por la extensa colecci贸n de errores en el c贸digo que encontramos durante la verificaci贸n de varios proyectos abiertos.

Le presentamos una descripci贸n general de las nuevas funciones incluidas en el lanzamiento de PVS-Studio 7.04.

Buscar archivos con licencias Copyleft


Desarrolladores de donde simplemente no obtienen el c贸digo, trabajando en la tarea. Una fuente popular para el c贸digo Copy-Paste es el sitio Stackoverflow y similares. Pero puede haber situaciones en las que el programador toma el c贸digo del proyecto Open Source y no verifica los requisitos de la licencia. Por lo tanto, varios archivos del proyecto de c贸digo abierto con licencia Copyleft pueden entrar accidentalmente en un proyecto de c贸digo cerrado, es decir. obligando a hacer p煤blico todo el c贸digo del proyecto. En las empresas con una gran cantidad de empleados, es dif铆cil realizar un seguimiento, y los riesgos y problemas pueden ser graves debido a tales acciones. Entonces, en PVS-Studio para todos los lenguajes compatibles (C, C ++, C #, Java), han aparecido diagn贸sticos que ayudar谩n a encontrar dichos archivos.

N煤meros de diagn贸stico para diferentes idiomas:


Analicemos estos diagn贸sticos con m谩s detalle y analicemos para qu茅 est谩n hechos. Un ejemplo de un comentario sobre el cual el analizador emitir谩 una advertencia:

/* 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 (GPL3 en este caso) a un proyecto cerrado, el resto del c贸digo fuente deber谩 abrirse, debido a la naturaleza de esta licencia.

Este tipo de licencia copyleft se denomina licencia " viral ", debido a su capacidad de propagarse a otros archivos de proyecto. El problema es que el uso de al menos un archivo con una licencia similar en un proyecto cerrado autom谩ticamente abre todo el c贸digo fuente y le obliga a distribuirlo junto con los archivos binarios.

Diagn贸stico busca las siguientes licencias "virales":

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

Existen las siguientes opciones, lo que puede hacer cuando descubre el uso de archivos con licencia copyleft en un proyecto cerrado:

  1. Negarse a usar este c贸digo (biblioteca) en su proyecto;
  2. Reemplazar la biblioteca utilizada;
  3. Haz que tu proyecto sea abierto.

Para proyectos de c贸digo abierto.


Entendemos que este diagn贸stico no es apropiado para proyectos de c贸digo abierto. El equipo de PVS-Studio contribuye al desarrollo de proyectos abiertos, 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 usa el complemento PVS-Studio para Visual Studio, vaya a Opciones> PVS-Studio> Errores detectables> 1. An谩lisis general> V1042, puede desactivar la visualizaci贸n de este diagn贸stico en la ventana de salida del analizador. La desventaja de este m茅todo es que el error a煤n se escribir谩 en el registro del analizador cuando se guarde (o si el an谩lisis se inici贸 desde la l铆nea de comandos). Por lo tanto, al abrir dicho registro en otra m谩quina o convertir los resultados del an谩lisis a un formato diferente, los mensajes deshabilitados de esta manera pueden aparecer nuevamente.
  • Si no utiliza el complemento, desea bloquear la regla para todo el comando o eliminar sus mensajes del informe del analizador, entonces 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 al archivo stdafx.h. Este comentario le dice al analizador que desactive el diagn贸stico V1042. Para obtener m谩s informaci贸n sobre c贸mo deshabilitar los diagn贸sticos mediante comentarios, consulte la documentaci贸n .
  • Si la utilidad Plog Converter se usa para convertir informes, puede desactivar los diagn贸sticos con el interruptor "-d".

Para C #, significa V3144, respectivamente, y para Java - V6071.

Agregar a la lista de licencias peligrosas


Si tambi茅n conoce los tipos de licencias "virales" que la herramienta no detecta actualmente, puede informarnos sobre ellos a trav茅s del formulario de comentarios . Y agregaremos su identificaci贸n 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.

Tambi茅n me gustar铆a mencionar los diagn贸sticos con el n煤mero V1040 . Incluso en estado beta, ya encontr贸 un error interesante en la biblioteca del conocido proyecto CMake:

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 

Aqu铆 hicieron un error tipogr谩fico en el nombre __MINGW32_ . Al final, falta un gui贸n bajo. Si busca por c贸digo con este nombre, puede asegurarse de que el proyecto realmente use la versi贸n con dos guiones bajos en ambos lados:

Cuadro 8

Puede ver todos los errores encontrados en el proyecto CMake en el art铆culo " CMake: el caso en que la calidad de su c贸digo es inexcusable para el proyecto ".

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'.

Tambi茅n en el analizador de C #, se ha agregado el c谩lculo de los valores de retorno / escritura de los m茅todos de acceso de propiedad get y set y los m茅todos as铆ncronos.

Actualmente estamos trabajando para mejorar el seguimiento de los valores de campo y las propiedades de los objetos al pasarlos a los m茅todos, as铆 como el seguimiento del contenido de las tuplas. 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 una nueva versi贸n con celo especial, comenzando con SQ 7.x, y cuando se lanz贸 LTS, los usuarios comenzaron a cambiarlo activamente, lo que caus贸 varios problemas. SQ 7.9.1 LTS se lanz贸 pronto con correcciones menores, y los desarrolladores de complementos de terceros tambi茅n prepararon parches.

Afortunadamente, en el complemento PVS-Studio solo hubo un peque帽o problema asociado con la transici贸n a Java 11, que solucionamos r谩pidamente, y nuestros clientes cambiaron inmediatamente a una versi贸n funcional.

Tambi茅n mantuvimos la compatibilidad con versiones anteriores de SonarQube, y la lista de versiones compatibles ahora se ve as铆: SonarQube 6.7 LTS y superior .

M谩s complementos de idiomas compatibles


El complemento PVS-Studio solo convierte los resultados del an谩lisis al formato de la base de datos SonarQube. En otras palabras, simplemente carga los resultados del an谩lisis PVS-Studuio en SQ. Pero para el funcionamiento completo de la utilidad SonarScanner, se deben instalar complementos para lenguajes de programaci贸n. No comenzamos a desarrollar lo que ya existe, por lo tanto, simplemente agregamos soporte para complementos populares ya existentes. En esta versi贸n, agregamos compatibilidad con los complementos de lenguaje Sonar C Community y SonarCFamily.

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


Para descargar los resultados del an谩lisis PVS-Studio, es suficiente instalar al menos un complemento de esta lista. La mayor铆a de los usuarios solo necesitan instalar Sonar C ++ Community, SonarC # o SonarJava. Es posible que se necesiten otros complementos para proyectos m谩s espec铆ficos.

Al elegir complementos, es necesario tener en cuenta el hecho de que los complementos de la comunidad no son compatibles con SonarCFamily. Pero si usa solo SonarQube Community Edition, tal problema no surgir谩.

Nueva p谩gina de configuraci贸n


Anteriormente, 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 en el 99% de los casos, pero adicionalmente hicimos la p谩gina de configuraci贸n en Administraci贸n> Configuraci贸n> PVS-Studio en el servidor SonarQube, porque Tambi茅n es conveniente usarlo en algunos escenarios.

La p谩gina de configuraci贸n se ve as铆:

Cuadro 10

Al establecer la configuraci贸n de dos maneras, se da prioridad a las especificadas en el archivo sonar-project.properties .

Plugin para IntelliJ IDEA


Los lanzamientos de las nuevas versiones de IntelliJ IDEA y PVS-Studio difieren en fechas, y recientemente hubo una situaci贸n en la que se lanz贸 IntelliJ IDEA 192. *, pero el complemento PVS-Studio no estaba instalado en 茅l. En esta versi贸n, agregamos soporte para la 煤ltima versi贸n de IntelliJ IDEA, y tambi茅n realizamos mejoras para evitar problemas similares en el futuro.

Complementos para Jenkins


PVS-Studio Plugin

PVS-Studio Plugin est谩 destinado a publicar 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, ya que llam贸 al convertidor de informes autom谩ticamente y lo hizo solo para Windows. En PVS-Studio 7.04, el complemento solo admite informes HTML, que deben generarse en un paso separado, pero esto permiti贸 que el complemento fuera multiplataforma.

Advertencias NG Plugin

Para Jenkins, hay un complemento de complemento de advertencias de pr贸xima generaci贸n 煤til para ver los resultados de an谩lisis de varias herramientas. Recientemente, agregamos soporte para PVS-Studio en 茅l. La capacidad de cargar los resultados de an谩lisis de PVS-Studio usando este complemento se hizo disponible en la versi贸n 6.0.0 , cuyo lanzamiento coincidi贸 con el lanzamiento de PVS-Studio 7.04:

Imagen 1

Otras mejoras


PVS-Studio_Cmd

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

An谩lisis de proyectos de motor irreal

En el complemento PVS-Studio para Visual Studio, se agreg贸 la opci贸n AutoloadUnrealEngineLog , cuya inclusi贸n le permite cargar autom谩ticamente el informe del analizador en la ventana de salida de PVS-Studio despu茅s de pasar el an谩lisis. Sin esta opci贸n, la carga del registro debe realizarse manualmente a trav茅s del men煤 del complemento.

Adem谩s, en la secci贸n de documentaci贸n " Prueba de proyectos de Unreal Engine ", se describieron cambios en los scripts de ensamblaje est谩ndar que permitir谩n el ensamblaje y el an谩lisis en una sola acci贸n. Sin modificar los scripts (al agregar el indicador -StaticAnalyzer = PVSStudio a los argumentos de inicio), solo se analiza el proyecto, sin generarlo .

CLMonitor

Para la utilidad CLMonitor, se ha agregado la capacidad de rastrear los lanzamientos de compiladores para un proceso espec铆fico. Esto le permitir谩 rastrear los inicios de compiladores relacionados solo con un proyecto espec铆fico, incluso cuando construye varios proyectos en paralelo. Para trabajar en este modo, se utilizan los indicadores --parentProcessID% PID% (CLMonitor supervisa los procesos que son secundarios en relaci贸n con lo especificado) y --attach (CLMonitor supervisa los procesos que son secundarios en relaci贸n con la consola actual).

pvs-studio-analyzer

El indicador --ignore-ccache se ha agregado a la utilidad pvs-studio-analyzer , que est谩 dise帽ada para probar proyectos en Linux y macOS:

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

Si la utilidad ccache se usa en el ensamblaje del proyecto, PVS-Studio funciona en modo de an谩lisis incremental. Para verificar el proyecto por completo sin soltar el cach茅 de la utilidad ccache , use este indicador.

Enlaces de sitio


Para estar al d铆a de nuestras nuevas publicaciones, lo invitamos a suscribirse a nosotros:

  1. Twitter: pvsstudio_rus
  2. VKontakte: analizador PVS-Studio
  3. Facebook: @StaticCodeAnalyzer
  4. Instagram: @pvsstudio_rus
  5. Telegrama: PVS-Studio rus
  6. RSS: viva64-blog-es

PVS-Studio:

  1. P谩gina del producto
  2. Descargar
  3. La documentaci贸n
  4. Los clientes



Si desea compartir este art铆culo con una audiencia de habla inglesa, utilice el enlace a la traducci贸n: Svyatoslav Razmyslov. PVS-Studio 7.04 .

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


All Articles