È stata rilasciata una nuova versione dell'analizzatore statico del codice cppcheck 2.6, che consente di identificare diverse classi di errori nel codice nei linguaggi C e C++, incluso l'utilizzo di sintassi non standard, tipica dei sistemi embedded. È disponibile una collezione di plugin, attraverso i quali è garantita l'integrazione di cppcheck con vari sistemi di sviluppo, integrazione continua e testing, oltre a fornire funzionalità come il controllo della conformità del codice allo stile di codifica. Per l'analisi del codice può essere utilizzato sia il parser interno che un parser esterno di Clang. È incluso anche uno script donate-cpu.py per fornire risorse locali per il lavoro di revisione collettiva del codice dei pacchetti Debian. I codici sorgente del progetto sono distribuiti sotto licenza GPLv3.
Lo sviluppo di cppcheck è incentrato sull'identificazione di problemi legati a comportamenti indefiniti e all'uso di costrutti pericolosi dal punto di vista della sicurezza. L'obiettivo è anche ridurre al minimo i falsi positivi. Tra i problemi identificati: puntatori a oggetti inesistenti, divisioni per zero, overflow interi, operazioni errate di shift bit, conversioni errate, problemi nella gestione della memoria, uso errato di STL, dereferenziazione di puntatori nulli, applicazione di controlli dopo il reale accesso al buffer, accesso oltre i limiti dei buffer, utilizzo di variabili non inizializzate.
Nella nuova versione:
- Nel core dell'analizzatore sono state aggiunte le seguenti verifiche:
- assenza dell'operatore return nel corpo della funzione;
- scritture di dati sovrapposti, definizione di comportamento indefinito;
- il valore confrontato è al di fuori della rappresentazione dei valori del tipo;
- l'ottimizzazione della copia non viene applicata per return std::move(local);
- il file non può essere aperto simultaneamente per lettura e scrittura in flussi diversi;
- per le piattaforme Unix è stata aggiunta la supporto per l'output di messaggi diagnostici di diversi colori;
- aggiunta analisi simbolica per ValueFlow. Viene utilizzato un 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> ora può contenere il tag <container>, e di conseguenza le funzioni free, che possono accettare tali contenitori come std::size, std::empty, std::begin, std::end, ecc., possono specificare yeld o action per i contenitori;
- Il tag di libreria <smart-pointer> ora può contenere il tag <unique> per i puntatori smart, che hanno una proprietà esclusiva (unique ownership). Ora viene emesso un avviso riguardo ai riferimenti 'appesi' a questo tipo di puntatori smart;
- Corrette le problematiche relative all'elaborazione del parametro —cppcheck-build-dir;
- htmlreport ora può fornire informazioni sull'autore (tramite git blame);
- Espanso l'emissione di avvisi su variabili che non sono costanti, ma potrebbero esserlo;
- Corrette le errori e le mancanze accumulate dell'analizzatore.
Sono state completamente implementate le verifiche da Misra C 2012, compresi emendamenti 1 e 2, tranne le regole 1.1, 1.2 e 17.3. Le verifiche 1.1 e 1.2 devono essere effettuate dal compilatore. La verifica 17.3 può essere eseguita, ad esempio, dal compilatore GCC.
Fonte: opennet.ru
