Rilascio di cppcheck 2.6, un analizzatore di codice statico per i linguaggi C++ e C

È stata rilasciata una nuova versione dell'analizzatore di codice statico cppcheck 2.6, che consente di identificare varie classi di errori nel codice nei linguaggi C e C++, anche quando si utilizza una sintassi non standard, tipica dei sistemi embedded. Viene fornita una raccolta di plugin attraverso i quali cppcheck si integra con vari sistemi di sviluppo, integrazione continua e test e fornisce anche funzionalità come il controllo della conformità del codice con lo stile del codice. Per analizzare il codice, puoi utilizzare il tuo parser o un parser esterno di Clang. Include anche lo script donate-cpu.py per fornire risorse locali per svolgere un lavoro collaborativo di revisione del codice per i pacchetti Debian. Il codice sorgente del progetto è distribuito sotto la licenza GPLv3.

Lo sviluppo di cppcheck è focalizzato sull'identificazione dei problemi associati a comportamenti indefiniti e all'uso di progetti pericolosi dal punto di vista della sicurezza. L’obiettivo è anche quello di ridurre al minimo i falsi positivi. Tra i problemi identificati: puntatori a oggetti inesistenti, divisioni per zero, overflow di numeri interi, operazioni errate di spostamento di bit, conversioni errate, problemi quando si lavora con la memoria, uso errato di STL, dereferenziazioni di puntatori nulli, uso di controlli dopo l'accesso effettivo al buffer, sovraccarico del buffer, utilizzo di variabili non inizializzate.

Nella nuova versione:

  • I seguenti controlli sono stati aggiunti al core dell'analizzatore:
    • assenza di un operatore return nel corpo della funzione;
    • registra dati sovrapposti, determina comportamenti indefiniti;
    • il valore da confrontare è esterno alla rappresentazione del valore del tipo;
    • l'ottimizzazione della copia non si applica alla restituzione std::move(local);
    • il file non può essere aperto contemporaneamente per la lettura e la scrittura in flussi diversi (stream);
  • per le piattaforme Unix, aggiunto il supporto per la visualizzazione dei messaggi diagnostici in diversi colori;
  • aggiunta l'analisi simbolica per ValueFlow. Utilizza delta semplice quando si calcola la differenza tra due variabili sconosciute;
  • le regole usate per l'elenco dei token "define" possono corrispondere anche a #include;
  • etichetta della biblioteca ora può contenere un tag , e di conseguenza le funzioni libere, che possono accettare contenitori come std::size, std::empty, std::begin, std::end, ecc. può specificare il rendimento o l'azione per i connettori;
  • etichetta della biblioteca ora può contenere un tag per puntatori intelligenti che hanno proprietà univoche. Viene ora emesso un avviso sui riferimenti pendenti a questi tipi di puntatori intelligenti;
  • risolti i problemi con l'elaborazione del parametro —cppcheck-build-dir;
  • htmlreport ora può visualizzare informazioni sull'autore (usando git colpa);
  • avvisi estesi sulle variabili che non sono costanti, ma potrebbero esserlo;
  • Gli errori e i difetti accumulati dell'analizzatore sono stati corretti.

Inoltre, i controlli di Misra C 2012, inclusi l'Emendamento 1 e l'Emendamento 2, sono stati completamente implementati, ad eccezione delle regole 1.1, 1.2 e 17.3. I controlli 1.1 e 1.2 devono essere eseguiti dal compilatore. La verifica 17.3 può essere eseguita da un compilatore come GCC.

Fonte: opennet.ru

Aggiungi un commento