Lansarea cppcheck 2.6, un analizator static de cod pentru limbajele C++ și C

A apărut o nouă versiune a analizorului static de cod cppcheck 2.6, care permite identificarea diferitelor clase de erori în codul scris în limbajele C și C++, inclusiv atunci când se utilizează o sintaxă neconvențională, specifică sistemelor încorporate. Oferă o colecție de plugin-uri prin care este asigurată integrarea cppcheck cu diverse sisteme de dezvoltare, integrare continuă și testare, precum și funcționalități cum ar fi verificarea conformității codului cu stilul de codare. Atât parserul propriu, cât și parserul extern de la Clang pot fi utilizate pentru analizarea codului. De asemenea, include un script donate-cpu.py pentru a oferi resurse locale pentru realizarea lucrărilor de verificare colaborativă a codului pachetelor Debian. Codul sursă al proiectului este distribuit sub licența GPLv3.

Dezvoltarea cppcheck se concentrează pe identificarea problemelor legate de comportamentul neclar și pe utilizarea construcțiilor periculoase din punct de vedere al securității. De asemenea, obiectivul este de a minimiza alarmele false. Problemele identificate includ: pointeri către obiecte inexistente, împărțiri la zero, depășiri de capacitate a numericelor, operații incorecte de deplasare pe biți, conversii incorecte, probleme de gestionare a memoriei, utilizarea incorectă a STL, dereferentieri de pointeri nuli, aplicarea verificărilor după accesarea efectivă a bufferului, depășiri ale limitelor bufferelor, utilizarea variabilelor neinițializate.

În noua versiune:

  • În nucleul analizorului au fost adăugate următoarele verificări:
    • lipsa operatorului return în corpul unei funcții;
    • scrierea de date care se suprapun, determinarea comportamentului neclar;
    • valoarea comparată se află în afara domeniului valorilor tipului;
    • optimizarea copiei nu se aplică pentru return std::move(local);
    • fișierul nu poate fi deschis simultan pentru citire și scriere în fluxuri diferite;
  • pentru platformele Unix a fost adăugată suport pentru afișarea mesajelor de diagnostic în culori diferite;
  • a fost adăugat analiza simbolică pentru ValueFlow. Se folosește o delta simplă pentru calcularea diferențelor între două variabile necunoscute;
  • regulile utilizate pentru lista de tokenuri „define” pot corespunde și pentru #include;
  • eticheta de bibliotecă poate acum conține eticheta , iar funcțiile free care pot accepta aceste containere, cum ar fi std::size, std::empty, std::begin, std::end etc., pot specifica yeld sau action pentru containere;
  • eticheta de bibliotecă poate acum conține eticheta pentru pointerii inteligenți care au proprietate exclusivă (unique ownership). Acum se emite un avertisment cu privire la „referințele suspendate” la acest tip de pointeri inteligenți;
  • au fost corectate problemele cu procesarea parametrului —cppcheck-build-dir;
  • htmlreport poate acum să prezinte informații despre autor (folosind git blame);
  • a fost extinsă emiterea avertismentelor pentru variabile care nu sunt constante, dar care ar putea fi;
  • au fost corectate erorile și neajunsurile acumulative ale analizatorului.

În plus, au fost implementate complet verificările din Misra C 2012, inclusiv Amendamentul 1 și Amendamentul 2, cu excepția regulilor 1.1, 1.2 și 17.3. Verificările 1.1 și 1.2 trebuie efectuate de către compilator. Verificarea 17.3 poate fi efectuată de compilator, de exemplu, GCC.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster