ProHoster > PVS-Studio ayeuna di Chocolatey: mariksa Chocolatey ti handapeun Azure DevOps
PVS-Studio ayeuna di Chocolatey: mariksa Chocolatey ti handapeun Azure DevOps
Urang terus make PVS-Studio leuwih merenah. Analis kami ayeuna sayogi di Chocolatey, manajer pakét pikeun Windows. Kami yakin yén ieu bakal ngagampangkeun panyebaran PVS-Studio, khususna, dina jasa awan. Pikeun henteu jauh, hayu urang parios kode sumber tina Coklat anu sami. Azure DevOps bakal meta salaku sistem CI.
Ieu daptar tulisan kami anu sanés ngeunaan topik integrasi sareng sistem awan:
Kuring mamatahan anjeun nengetan artikel munggaran ngeunaan integrasi jeung Azure DevOps, sabab dina hal ieu sababaraha titik dileungitkeun ku kituna teu jadi duplikat.
Janten, pahlawan tulisan ieu:
PVS Studio mangrupakeun alat analisis kode statik dirancang pikeun ngaidentipikasi kasalahan sarta potensi kerentanan dina program ditulis dina C, C ++, C # jeung Java. Dijalankeun dina sistem Windows, Linux, sareng macOS 64-bit, sareng tiasa nganalisa kode anu dirancang pikeun platform ARM 32-bit, 64-bit, sareng dipasang. Upami ieu pertama kalina anjeun nyobian analisis kode statik pikeun mariksa proyék anjeun, kami nyarankeun yén anjeun familiarize diri artikel ngeunaan kumaha gancang nempo warnings PVS-Studio paling metot jeung evaluate kamampuhan alat ieu.
Azure DevOps — sakumpulan jasa awan anu babarengan nutupan sakabéh prosés pangwangunan. Platform ieu kalebet alat sapertos Azure Pipelines, Azure Boards, Azure Artifacts, Azure Repos, Azure Test Plans, anu ngamungkinkeun anjeun nyepetkeun prosés nyiptakeun parangkat lunak sareng ningkatkeun kualitasna.
Chocolatey nyaéta manajer pakét open source pikeun Windows. Tujuan tina proyék nyaéta pikeun ngajadikeun otomatis sakabéh siklus hirup software ti pamasangan nepi ka ngamutahirkeun jeung uninstallation dina sistem operasi Windows.
Ngeunaan ngagunakeun Chocolatey
Anjeun tiasa ningali kumaha masang manajer pakét sorangan dina ieu link. Dokuméntasi lengkep pikeun masang analyzer sayogi di link Tempo Instalasi ngagunakeun bagian Chocolatey pakét manajer. Kuring sakeudeung bakal ngulang sababaraha titik ti dinya.
Paréntah pikeun masang versi pangénggalna analisa:
choco install pvs-studio
Paréntah pikeun masang versi khusus tina pakét PVS-Studio:
Sacara standar, ngan ukur inti analisa, komponén Inti, dipasang. Kabéh umbul séjén (Standalone, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) bisa diliwatan ngagunakeun --package-parameters.
Conto paréntah anu bakal masang analisa sareng plugin pikeun Visual Studio 2019:
Ayeuna hayu urang tingali conto panggunaan analisa anu gampang dina Azure DevOps.
carana ngatur
Hayu atuh ngingetkeun yén aya bagian misah ngeunaan masalah sapertos ngadaptar hiji akun, nyieun Pipeline Ngawangun tur nyingkronkeun akun anjeun kalawan proyék lokasina di gudang GitHub. artikel. Setélan urang bakal langsung dimimitian ku nulis file konfigurasi.
Mimiti, hayu urang nyetél pemicu peluncuran, nunjukkeun yén urang ngaluncurkeun ngan ukur pikeun parobihan ngawasaan cabang:
trigger:
- master
Salajengna urang kedah milih mesin virtual. Pikeun ayeuna éta bakal janten agén anu di-host Microsoft sareng Windows Server 2019 sareng Visual Studio 2019:
pool:
vmImage: 'windows-latest'
Hayu urang ngaléngkah ka awak file konfigurasi (block léngkah). Sanaos kanyataan yén anjeun henteu tiasa masang parangkat lunak sawenang-wenang kana mesin virtual, kuring henteu nambihan wadah Docker. Urang tiasa nambihan Chocolatey salaku ekstensi pikeun Azure DevOps. Jang ngalampahkeun ieu, hayu urang buka link. Pencét Kéngingkeun gratis. Salajengna, upami anjeun parantos otorisasi, kantun pilih akun anjeun, sareng upami henteu, teras lakonan hal anu sami saatos otorisasina.
Di dieu anjeun kedah milih dimana kami bakal nambihan ekstensi sareng klik tombolna masang.
Anjeun ayeuna tiasa ningali template pikeun tugas Chocolatey dina jandela tugas nalika ngédit file konfigurasi azure-pipelines.yml:
Klik dina Chocolatey tur tingal daptar widang:
Di dieu urang kudu milih masang di lapangan jeung tim. DI Ngaran File Nuspec nunjukkeun nami pakét anu diperyogikeun - pvs-studio. Mun anjeun teu nangtukeun versi, nu panganyarna bakal dipasang, nu cocog kami lengkep. Hayu urang pencét tombol nambah sarta kami bakal ningali tugas dihasilkeun dina file konfigurasi.
Salajengna, hayu urang ngalih ka bagian utama file urang:
- task: CmdLine@2
inputs:
script:
Ayeuna urang kedah nyiptakeun file nganggo lisénsi analisa. Ieuh PVSNAME и PVSKEY – ngaran variabel anu nilaina kami tangtukeun dina setélan. Aranjeunna bakal nyimpen login PVS-Studio sareng konci lisénsi. Pikeun nyetel nilai maranéhanana, buka ménu Variabel-> Variabel anyar. Hayu urang nyieun variabel PVSNAME pikeun login jeung PVSKEY pikeun konci analyzer. Tong hilap pariksa kotakna Tetep nilai ieu rusiah keur PVSKEY. Kodeu paréntah:
Hayu urang klik Simpen-> Simpen-> Jalankeun pikeun ngajalankeun tugas. Hayu urang ngundeur laporan ku buka tab tugas.
Proyék Chocolatey ngan ngandung 37615 garis kode C #. Hayu urang nempo sababaraha kasalahan kapanggih.
Hasil tés
Perhatosan N1
Peringatan analis: V3005 Variabel 'Panyadia' ditugaskeun ka dirina. CrytpoHashProviderSpecs.cs 38
public abstract class CrytpoHashProviderSpecsBase : TinySpec
{
....
protected CryptoHashProvider Provider;
....
public override void Context()
{
Provider = Provider = new CryptoHashProvider(FileSystem.Object);
}
}
Analis ngadeteksi tugas variabel ka dirina, anu henteu masuk akal. Paling dipikaresep, di tempat salah sahiji variabel ieu kudu aya sababaraha sejen. Nya, atanapi ieu mangrupikeun salah ketik, sareng tugas tambahan tiasa dileungitkeun.
bédana operator & ti operator && nya éta lamun beulah kénca babasan téh palsu, teras sisi katuhu bakal tetep diitung, nu dina hal ieu ngakibatkeun nelepon metoda teu perlu system.directory_exists.
Dina fragmen dianggap, ieu cacad minor. Leres, kaayaan ieu tiasa dioptimalkeun ku ngagentos operator & sareng operator &&, tapi tina sudut pandang praktis, ieu henteu mangaruhan nanaon. Nanging, dina kasus anu sanés, kabingungan antara & sareng && tiasa nyababkeun masalah anu serius nalika sisi katuhu éksprési dirawat kalayan nilai anu salah/teu valid. Contona, dina kumpulan kasalahan urang, diidentifikasi nganggo diagnostik V3093, aya kasus ieu:
if ((k < nct) & (s[k] != 0.0))
Malah lamun indéks k lepat, éta bakal dipaké pikeun ngakses hiji unsur Asép Sunandar Sunarya. Hasilna, pengecualian bakal dialungkeun IndexOutOfRangeException.
Dina hal ieu, aya logika aneh balik operasi operator ternary. Hayu urang nempo leuwih deukeut: lamun kaayaan kuring ditandaan ku angka 1 geus patepung, teras urang ngaléngkah ka kaayaan 2, nu salawasna bener, nu hartina baris 3 bakal dieksekusi. Lamun kaayaan 1 tétéla palsu, lajeng urang bakal balik ka garis ditandaan ku angka 4, kaayaan nu ogé salawasna bener, nu hartina baris 5 bakal dieksekusi. Ku kituna, kaayaan ditandaan komentar 0 moal pernah kaeusi, nu bisa jadi teu persis logika operasi nu programmer ekspektasi.
Perhatosan N5
Peringatan analis: V3123 [CWE-783] Panginten operator '?:' tiasa dianggo dina cara anu béda ti anu disangka. Prioritasna langkung handap tibatan prioritas operator sanés dina kaayaanana. Options.cs 1019
private static string GetArgumentName (...., string description)
{
string[] nameStart;
if (maxIndex == 1)
{
nameStart = new string[]{"{0:", "{"};
}
else
{
nameStart = new string[]{"{" + index + ":"};
}
for (int i = 0; i < nameStart.Length; ++i)
{
int start, j = 0;
do
{
start = description.IndexOf (nameStart [i], j);
}
while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false);
....
return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
}
}
Kusabab variabel j sababaraha garis di luhur ieu initialized ka enol, operator ternary bakal balik nilai palsu. Kusabab kaayaan ieu, awak loop bakal dieksekusi ngan sakali. Sigana mah yén sapotong kode ieu teu dianggo pisan sakumaha programmer dimaksudkeun.
private void remove_nuget_cache_for_package(....)
{
if (!config.AllVersions && installedPackageVersions.Count > 1)
{
const string allVersionsChoice = "All versions";
if (installedPackageVersions.Count != 1)
{
choices.Add(allVersionsChoice);
}
....
}
....
}
Aya kaayaan nested aneh di dieu: InstallPackageVersions.Count!= 1nu bakal salawasna bener. Sering peringatan sapertos nunjukkeun kasalahan logis dina kode, sareng dina kasus sanésna ngan ukur nunjukkeun pamariksaan anu kaleuleuwihan.
Perhatosan N7
Peringatan analis: V3001 Aya sub-ekspresi idéntik 'commandArguments.contains ("-apikey")' ka kénca jeung ka katuhu tina '||' operator. ArgumentsUtility.cs 42
Programmer anu nyerat bagian kode ieu nyalin sareng nempelkeun dua garis anu terakhir sareng hilap ngeditna. Kusabab ieu, pamaké Chocolatey teu bisa nerapkeun parameter apikey sababaraha cara deui. Sarupa sareng parameter di luhur, kuring tiasa nawiskeun pilihan ieu:
Kasalahan salinan-témpél gaduh kasempetan anu luhur pikeun muncul engké atanapi engké dina proyék naon waé kalayan jumlah kode sumber anu ageung, sareng salah sahiji alat anu pangsaéna pikeun meranganana nyaéta analisis statik.
PS Jeung sakumaha salawasna, kasalahan ieu condong muncul dina tungtung kaayaan multi-garis :). Tingali publikasi "Pangaruh garis panungtungan".
Perhatosan N8
Peringatan analis: V3095 [CWE-476] Obyék 'installedPackage' dipaké saméméh éta diverifikasi ngalawan null. Pariksa garis: 910, 917. NugetService.cs 910
public virtual ConcurrentDictionary<string, PackageResult> get_outdated(....)
{
....
var pinnedPackageResult = outdatedPackages.GetOrAdd(
packageName,
new PackageResult(installedPackage,
_fileSystem.combine_paths(
ApplicationParameters.PackagesLocation,
installedPackage.Id)));
....
if ( installedPackage != null
&& !string.IsNullOrWhiteSpace(installedPackage.Version.SpecialVersion)
&& !config.UpgradeCommand.ExcludePrerelease)
{
....
}
....
}
Kasalahan klasik: obyék heula InstallPackage dipaké lajeng dipariksa pikeun null. Diagnostik ieu nyarioskeun ka urang ngeunaan salah sahiji tina dua masalah dina program: boh InstallPackage pernah sarua null, nu diragukeun, lajeng dipariksa téh kaleuleuwihan, atanapi urang berpotensi meunang kasalahan serius dina kode - usaha pikeun ngakses rujukan null.
kacindekan
Janten kami parantos nyandak léngkah leutik - ayeuna nganggo PVS-Studio parantos janten langkung gampang sareng langkung gampang. Kuring ogé hoyong disebutkeun yen Chocolatey mangrupakeun manajer pakét alus kalawan sajumlah leutik kasalahan dina kode, nu bisa jadi malah pangsaeutikna lamun maké PVS-Studio.
Urang ngajak anjeun скачать jeung cobaan PVS-Studio. Pamakéan rutin analis statik bakal ningkatkeun kualitas sareng reliabilitas kode anu dikembangkeun ku tim anjeun sareng ngabantosan nyegah seueur kerentanan enol poé.
PS
Sateuacan publikasi, kami ngirim tulisan ka pamekar Chocolatey, sareng aranjeunna nampi éta saé. Kami henteu mendakan nanaon anu kritis, tapi aranjeunna, contona, resep kutu anu kami mendakan aya hubunganana sareng konci "api-konci".