È stata rilasciata una nuova versione dell'analizzatore statico di codice cppcheck 2.6, in grado di rilevare diverse categorie di errori nel codice C e C++, anche quando si utilizza una sintassi non standard tipica dei sistemi embedded. È fornita una collezione di plugin che garantiscono l'integrazione di cppcheck con vari sistemi di sviluppo, integrazione continua e testing, oltre a funzionalità come il controllo della conformità del codice allo stile di codifica. Può essere utilizzato sia un parser interno che un parser esterno di Clang per l'analisi del codice. Include anche uno script donate-cpu.py per fornire risorse locali per eseguire lavori di revisione collaborativa sul codice dei pacchetti Debian. I sorgenti del progetto sono distribuiti sotto licenza GPLv3.
Lo sviluppo di cppcheck si concentra sull'identificazione di problemi legati a comportamenti imprevisti e sull'uso di costrutti pericolosi dal punto di vista della sicurezza. L'obiettivo è anche ridurre al minimo i falsi positivi. Tra i problemi identificati ci sono: puntatori a oggetti non esistenti, divisioni per zero, overflow di interi, operazioni di shift dei bit non corrette, conversioni errate, problemi nella gestione della memoria, uso incorretto della STL, dereferenziazione di puntatori nulli, controlli effettuati dopo l'effettivo accesso al buffer, superamento dei limiti dei buffer, utilizzo di variabili non inizializzate.
Nella nuova versione:
- Nel nucleo dell'analizzatore sono state aggiunte le seguenti verifiche:
- assenza dell'operatore return nel corpo della funzione;
- scritture di dati sovrapposti, definizione di comportamenti imprevisti;
- il valore confrontato è al di fuori della rappresentazione dei valori di tipo;
- l'ottimizzazione della copia non è applicata per return std::move(local);
- il file non può essere aperto contemporaneamente per lettura e scrittura in diversi stream;
- per le piattaforme Unix è stata aggiunta la supporto per l'output di messaggi diagnostici in diversi colori;
- è stata aggiunta un'analisi simbolica per ValueFlow. Viene utilizzata una semplice delta per calcolare le differenze tra due variabili sconosciute;
- le regole utilizzate per l'elenco dei token «define» possono anche corrispondere a #include;
- il tag di libreria <function> può ora contenere il tag <container>, e quindi le funzioni free che possono accettare tali contenitori come std::size, std::empty, std::begin, std::end, ecc. possono indicare yeld o action per i contenitori;
- il tag di libreria può ora contenere il tag per puntatori intelligenti che hanno una proprietà esclusiva (unique ownership). Viene ora emesso un avviso per i riferimenti «sospesi» a questo tipo di puntatori intelligenti;
- risolti problemi con l'elaborazione del parametro —cppcheck-build-dir;
- htmlreport ora può visualizzare informazioni sull'autore (utilizzando git blame);
- ampliata la segnalazione di avvisi su variabili che non sono costanti, ma potrebbero esserlo;
- risolti errori e problemi accumulati nell'analizzatore.
Sono state implementate completamente le verifiche della Misra C 2012, incluse le modifiche 1 e 2, ad eccezione delle regole 1.1, 1.2 e 17.3. Le verifiche 1.1 e 1.2 devono essere eseguite dal compilatore. La verifica 17.3 può essere effettuata dal compilatore, ad esempio GCC.
Fonte: opennet.ru
