Se ha lanzado una nueva versión del analizador estático de código cppcheck 2.6, que permite identificar varias clases de errores en el código de los lenguajes C y C++, incluyendo el uso de sintaxis no estándar, típica de sistemas embebidos. Se proporciona una colección de complementos mediante los cuales se asegura la integración de cppcheck con varios sistemas de desarrollo, integración continua y pruebas, así como se ofrecen funcionalidades como la verificación de conformidad del código con el estilo de codificación. Se puede utilizar tanto un analizador propio como un analizador externo de Clang para el análisis del código. También incluye un script donate-cpu.py para proporcionar recursos locales para realizar trabajos de revisión de código en paquetes Debian. Los códigos fuente del proyecto se distribuyen bajo la licencia GPLv3.
El desarrollo de cppcheck se centra en identificar problemas relacionados con comportamientos indefinidos y el uso de construcciones que representan un riesgo de seguridad. También se busca minimizar los falsos positivos. Entre los problemas identificados están: punteros a objetos inexistentes, divisiones por cero, desbordamientos enteros, operaciones incorrectas de desplazamiento a nivel de bits, conversiones inadecuadas, problemas al manejar la memoria, uso incorrecto de STL, desreferenciación de punteros nulos, aplicación de verificaciones después del acceso real a un buffer, desbordamientos de buffers, y uso de variables no inicializadas.
En la nueva versión:
- Se han añadido las siguientes verificaciones al núcleo del analizador:
- ausencia del operador return en el cuerpo de la función;
- escritura de datos superpuestos, determinación de comportamientos indefinidos;
- el valor comparado está fuera del rango de representación del tipo;
- no se aplica optimización de copia para return std::move(local);
- el archivo no puede abrirse simultáneamente para lectura y escritura en diferentes flujos;
- para plataformas Unix se ha añadido soporte para la salida de mensajes de diagnóstico en diferentes colores;
- se ha añadido análisis simbólico para ValueFlow. Se utiliza una delta simple al calcular las diferencias entre dos variables desconocidas;
- las reglas utilizadas para la lista de tokens «define» también pueden aplicarse a #include;
- La etiqueta de la biblioteca ahora puede contener la etiqueta , y en consecuencia, las funciones free, que pueden aceptar estos contenedores como std::size, std::empty, std::begin, std::end, etc., pueden indicar yield o action para los contenedores;
- La etiqueta de la biblioteca ahora puede contener la etiqueta para punteros inteligentes que tienen propiedad exclusiva (unique ownership). Ahora se emite una advertencia sobre referencias ‘colgantes’ a este tipo de punteros inteligentes;
- Se han corregido problemas con el procesamiento del parámetro —cppcheck-build-dir;
- htmlreport ahora puede mostrar información sobre el autor (usando git blame);
- Se ha ampliado la emisión de advertencias sobre variables que no son constantes, pero que podrían serlo;
- Se han corregido errores acumulados y problemas del analizador.
Además, se han implementadas completamente las comprobaciones de Misra C 2012, incluyendo la Enmienda 1 y la Enmienda 2, excepto las reglas 1.1, 1.2 y 17.3. Las comprobaciones 1.1 y 1.2 deben ser realizadas por el compilador. La comprobación 17.3 puede ser realizada por el compilador, por ejemplo, GCC.
Fuente: opennet.ru
