Vydanie cppcheck 2.6, statického analyzátora kódu pre jazyky C++ a C

Vyšla nová verzia statického analyzátora kódu cppcheck 2.6, ktorý umožňuje odhaľovať rôzne triedy chýb v kóde na jazykoch C a C++, vrátane použitia nestandardnej syntaxe typickej pre zabudované systémy. Poskytuje sa kolekcia pluginov, prostredníctvom ktorých je zabezpečená integrácia cppcheck s rôznymi systémami vývoja, kontinuálnej integrácie a testovania, ako aj možnosti ako kontrola súladu kódu s štýlovými usmerneniami. Na analýzu kódu môže byť použitý vlastný parser alebo externý parser od Clang. Sádzajú sa tiež skripty donate-cpu.py na poskytnutie lokálnych zdrojov na vykonávanie spoločnej kontroly kódu balíkov Debian. Zdrojové kódy projektov sú distribuované pod licenciou GPLv3.

Rozvoj cppcheck je zameraný na odhaľovanie problémov súvisiacich s neurčitým správaním a použitím konštrukcií nebezpečných z hľadiska bezpečnosti. Cieľom je tiež minimalizácia falošných poplachov. Medzi odhaľované problémy patrí: ukazovatele na neexistujúce objekty, delenia na nulu, celočíselné pretečenia, nesprávne operácie posúvania bitov, nesprávne konverzie, problémy pri práci s pamäťou, nesprávne použitie STL, dereferencovanie nulových ukazovateľov, vykonávanie kontrol po fyzickom prístupe k bufferu, prekročenie hraníc bufferov, používanie neinitializovaných premenných.

V novej verzii:

  • Do jadra analyzátora pribudli nasledujúce kontroly:
    • neprítomnosť operátora return v tele funkcie;
    • zapísanie prekryvajúcich sa dát, určenie neurčitého správania;
    • porovnávaná hodnota sa nachádza mimo rozsahu reprezentácie typu;
    • optimalizácia kopírovania sa neuplatňuje pre return std::move(local);
    • súbor nemôže byť otvorený súčasne na čítanie a na zápis v rôznych prúdoch (stream);
  • pre Unixové platformy bola pridaná podpora výstupu diagnostických správ rôznymi farbami;
  • pridaná symbolická analýza pre ValueFlow. Používa sa jednoduchá delta pri výpočte rozdielov medzi dvoma neznámymi premennými;
  • pravidlá používané pre zoznam tokenov „define“ môžu taktiež zodpovedať aj #include;
  • Knižničný tag teraz môže obsahovať tag , a zodpovedajúce funkcie free, ktoré môžu prijímať takéto kontejnery ako std::size, std::empty, std::begin, std::end atď., môžu udávať yeld alebo action pre kontejnery;
  • Knižničný tag teraz môže obsahovať tag pre inteligentné ukazovatele, ktoré majú výlučné vlastníctvo (unique ownership). Teraz sa zobrazuje varovanie o „visiacich“ odkazoch na takého typu inteligentné ukazovatele;
  • Opravené problémy s spracovaním parametra —cppcheck-build-dir;
  • htmlreport teraz môže vypisovať informácie o autorovi (s použitím git blame);
  • Rozšírené varovania o premenných, ktoré nie sú konštantné, ale mohli by nimi byť;
  • Opravené nahromadené chyby a nedostatky analyzátora.

Okrem toho boli úplne implementované kontroly podľa Misra C 2012, vrátane Dodatku 1 a Dodatku 2, okrem pravidiel 1.1, 1.2 a 17.3. Kontroly 1.1 a 1.2 by mal vykonávať kompilátor. Kontrolu 17.3 môže vykonávať kompilátor, napríklad GCC.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster