ProHoster > PVS-Studio issa jinsab f'Chocolatey: jiċċekkja Chocolatey minn taħt Azure DevOps
PVS-Studio issa jinsab f'Chocolatey: jiċċekkja Chocolatey minn taħt Azure DevOps
Aħna nkomplu nagħmlu l-użu ta 'PVS-Studio aktar konvenjenti. L-analizzatur tagħna issa huwa disponibbli f'Chocolatey, maniġer tal-pakketti għall-Windows. Aħna nemmnu li dan se jiffaċilita l-iskjerament ta 'PVS-Studio, b'mod partikolari, fis-servizzi cloud. Sabiex ma tmurx 'il bogħod, ejja niċċekkjaw il-kodiċi tas-sors tal-istess Chocolatey. Azure DevOps se jaġixxi bħala sistema CI.
Hawnhekk hawn lista tal-artikoli l-oħra tagħna dwar is-suġġett tal-integrazzjoni mas-sistemi tal-cloud:
Nagħtikom parir biex tagħti attenzjoni lill-ewwel artiklu dwar l-integrazzjoni ma 'Azure DevOps, peress li f'dan il-każ xi punti jitħallew barra sabiex ma jiġux duplikati.
Allura, l-eroj ta 'dan l-artikolu:
PVS-Istudjo hija għodda statika ta' analiżi tal-kodiċi mfassla biex tidentifika żbalji u vulnerabbiltajiet potenzjali fi programmi miktuba f'C, C++, C# u Java. Jimxi fuq sistemi Windows, Linux, u macOS ta’ 64 bit, u jista’ janalizza kodiċi ddisinjat għal pjattaformi ARM ta’ 32 bit, 64 bit u inkorporati. Jekk din hija l-ewwel darba li tipprova analiżi tal-kodiċi statiku biex tiċċekkja l-proġetti tiegħek, nirrakkomandaw li tiffamiljarizza ruħek magħhom artikolu dwar kif tara malajr l-aktar twissijiet interessanti tal-PVS-Studio u tevalwa l-kapaċitajiet ta 'din l-għodda.
Azure DevOps — sett ta’ servizzi tal-cloud li flimkien ikopru l-proċess ta’ żvilupp kollu. Din il-pjattaforma tinkludi għodod bħal Azure Pipelines, Azure Boards, Azure Artifacts, Azure Repos, Azure Test Plans, li jippermettulek tħaffef il-proċess tal-ħolqien ta’ softwer u ttejjeb il-kwalità tiegħu.
Chocolatey huwa maniġer tal-pakketti ta' sors miftuħ għall-Windows. L-għan tal-proġett huwa li awtomat iċ-ċiklu tal-ħajja tas-softwer kollu mill-installazzjoni sa l-aġġornament u d-diżinstallazzjoni fuq is-sistemi operattivi Windows.
Dwar l-użu Chocolatey
Tista 'tara kif tinstalla l-maniġer tal-pakkett innifsu f'dan rabta. Dokumentazzjoni kompleta għall-installazzjoni tal-analizzatur hija disponibbli fuq rabta Ara l-Installazzjoni billi tuża t-taqsima tal-maniġer tal-pakketti Chocolatey. Se nirrepeti fil-qosor xi punti minn hemm.
Kmand biex tinstalla l-aħħar verżjoni tal-analizzatur:
choco install pvs-studio
Kmand biex tinstalla verżjoni speċifika tal-pakkett PVS-Studio:
B'mod awtomatiku, il-qalba tal-analizzatur biss, il-komponent Core, hija installata. Il-bnadar l-oħra kollha (Standalone, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) jistgħu jiġu mgħoddija bl-użu --package-parameters.
Eżempju ta' kmand li jinstalla analizzatur bi plugin għal Visual Studio 2019:
Issa ejja nħarsu lejn eżempju ta 'użu konvenjenti ta' l-analizzatur taħt Azure DevOps.
aġġustament
Ħa nfakkarkom li hemm sezzjoni separata dwar kwistjonijiet bħalma huma r-reġistrazzjoni ta' kont, il-ħolqien ta' Pipeline tal-Bini u s-sinkronizzazzjoni tal-kont tiegħek ma' proġett li jinsab fir-repożitorju ta' GitHub. artikolu. Is-setup tagħna se jibda immedjatament bil-kitba ta 'fajl ta' konfigurazzjoni.
L-ewwel, ejja nwaqqfu grillu tat-tnedija, li jindika li nniedu biss għal bidliet fi kaptan fergħa:
trigger:
- master
Sussegwentement irridu nagħżlu magna virtwali. Għalissa se jkun aġent ospitat minn Microsoft mal-Windows Server 2019 u Visual Studio 2019:
pool:
vmImage: 'windows-latest'
Ejja ngħaddu għall-korp tal-fajl tal-konfigurazzjoni (blokk passi). Minkejja l-fatt li ma tistax tinstalla softwer arbitrarju f'magna virtwali, ma żidtx kontenitur Docker. Nistgħu nżidu Chocolatey bħala estensjoni għal Azure DevOps. Biex tagħmel dan, ejja mmorru rabta. Ikklikkja Ġġibu b'xejn. Sussegwentement, jekk inti diġà awtorizzat, sempliċement agħżel il-kont tiegħek, u jekk le, imbagħad agħmel l-istess ħaġa wara l-awtorizzazzjoni.
Hawnhekk għandek bżonn tagħżel fejn se nżidu l-estensjoni u ikklikkja l-buttuna Installa.
Wara l-installazzjoni b'suċċess, ikklikkja Ipproċedi għall-organizzazzjoni:
Issa tista 'tara l-mudell għall-kompitu Chocolatey fit-tieqa kompiti meta teditja fajl ta' konfigurazzjoni azure-pipelines.yml:
Ikklikkja fuq Chocolatey u ara lista ta' oqsma:
Hawnhekk irridu nagħżlu jinstallaw fil-qasam mat-timijiet. IN Isem tal-Fajl Nuspec indika l-isem tal-pakkett meħtieġ – pvs-studio. Jekk ma tispeċifikax il-verżjoni, tiġi installata l-aħħar waħda, li jaqbel magħna kompletament. Ejja agħfas il-buttuna żid u se naraw il-kompitu ġġenerat fil-fajl tal-konfigurazzjoni.
Sussegwentement, ejja ngħaddu għall-parti prinċipali tal-fajl tagħna:
- task: CmdLine@2
inputs:
script:
Issa għandna bżonn noħolqu fajl bil-liċenzja tal-analizzatur. Hawn PVSNAME и PVSKEY – ismijiet ta’ varjabbli li l-valuri tagħhom aħna nispeċifikaw fis-settings. Huma ser jaħżnu l-login PVS-Studio u ċ-ċavetta tal-liċenzja. Biex tissettja l-valuri tagħhom, iftaħ il-menu Varjabbli-> Varjabbli ġdid. Ejja noħolqu varjabbli PVSNAME għall-login u PVSKEY għaċ-ċavetta tal-analizzatur. Tinsiex tiċċekkja l-kaxxa Żomm dan il-valur sigriet għall- PVSKEY. Kodiċi tal-kmand:
public abstract class CrytpoHashProviderSpecsBase : TinySpec
{
....
protected CryptoHashProvider Provider;
....
public override void Context()
{
Provider = Provider = new CryptoHashProvider(FileSystem.Object);
}
}
L-analizzatur skopra assenjazzjoni tal-varjabbli għalih innifsu, li ma jagħmilx sens. Ħafna probabbli, minflok waħda minn dawn il-varjabbli għandu jkun hemm xi waħda oħra. Ukoll, jew dan huwa typo, u l-assenjazzjoni żejda tista 'sempliċement titneħħa.
Twissija N2
Twissija tal-analizzatur: V3093 [CWE-480] L-operatur '&' jevalwa ż-żewġ operandi. Forsi operatur '&&' ta' short-circuit għandu jintuża minflok. Platform.cs 64
Differenza tal-operatur & mill-operatur && hija li jekk in-naħa tax-xellug tal-espressjoni hija falza, allura n-naħa tal-lemin xorta se tiġi kkalkulata, li f'dan il-każ jimplika sejħiet ta 'metodu mhux meħtieġa system.directory_exists.
Fil-framment meqjus, dan huwa difett minuri. Iva, din il-kundizzjoni tista 'tiġi ottimizzata billi tissostitwixxi l-operatur & bl-operatur &&, iżda mil-lat prattiku, dan ma jaffettwa xejn. Madankollu, f'każijiet oħra, il-konfużjoni bejn & u && tista' tikkawża problemi serji meta n-naħa tal-lemin tal-espressjoni tiġi ttrattata b'valuri skorretti/invalidi. Per eżempju, fil-ġbir ta 'żbalji tagħna, identifikati bl-użu tad-dijanjostiku V3093, hemm dan il-każ:
if ((k < nct) & (s[k] != 0.0))
Anke jekk l-indiċi k mhix korretta, se tintuża biex taċċessa element ta’ firxa. Bħala riżultat, se titneħħa eċċezzjoni IndexOutOfRangeException.
Twissijiet N3, N4
Twissija tal-analizzatur: V3022 [CWE-571] L-espressjoni 'shortPrompt' hija dejjem vera. InteractivePrompt.cs 101
Twissija tal-analizzatur: V3022 [CWE-571] L-espressjoni 'shortPrompt' hija dejjem vera. InteractivePrompt.cs 105
F'dan il-każ, hemm loġika stramba wara l-operat tal-operatur ternarju. Ejja nagħtu ħarsa aktar mill-qrib: jekk il-kundizzjoni li mmarkajt bin-numru 1 tiġi sodisfatta, allura ngħaddu għall-kundizzjoni 2, li hija dejjem veru, li jfisser li se tiġi esegwita l-linja 3. Jekk il-kundizzjoni 1 tirriżulta li hija falza, allura nimxu għal-linja mmarkata bin-numru 4, il-kundizzjoni li fiha hija wkoll dejjem veru, li jfisser li se tiġi eżegwita linja 5. Għalhekk, il-kundizzjonijiet immarkati bil-kumment 0 qatt mhu se jiġu sodisfatti, li jista 'ma jkunx eżattament il-loġika ta' operazzjoni li l-programmatur stenna.
Twissija N5
Twissija tal-analizzatur: V3123 [CWE-783] Forsi l-operatur '?:' jaħdem b'mod differenti milli kien mistenni. Il-prijorità tagħha hija inqas mill-prijorità ta' operaturi oħra fil-kundizzjoni tagħha. 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);
}
}
Peress li l-varjabbli j ftit linji hawn fuq huwa inizjalizzat għal żero, l-operatur ternarju se jirritorna l-valur falza. Minħabba din il-kundizzjoni, il-korp tal-linja se jiġi esegwit darba biss. Jidhirli li din il-biċċa kodiċi ma taħdimx xejn kif maħsub il-programmer.
Twissija N6
Twissija tal-analizzatur: V3022 [CWE-571] L-espressjoni 'installedPackageVersions.Count != 1' hija dejjem vera. NugetService.cs 1405
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);
}
....
}
....
}
Hemm kundizzjoni stramba mnaqqsa hawn: installPackageVersions.Count != 1li dejjem se jkun veru. Ħafna drabi twissija bħal din tindika żball loġiku fil-kodiċi, u f'każijiet oħra sempliċement tindika verifika żejda.
Twissija N7
Twissija tal-analizzatur: V3001 Hemm subespressjonijiet identiċi 'commandArguments.contains("-apikey")' fuq ix-xellug u fuq il-lemin tal-'||' operatur. ArgumentsUtility.cs 42
Il-programmatur li kiteb din it-taqsima tal-kodiċi kkupja u pejst l-aħħar żewġ linji u nesa jeditjahom. Minħabba dan, l-utenti Chocolatey ma setgħux japplikaw il-parametru apikey ftit modi oħra. Simili għall-parametri ta 'hawn fuq, nista' noffri l-għażliet li ġejjin:
L-iżbalji tal-copy-paste għandhom ċans kbir li jidhru illum jew għada fi kwalunkwe proġett b'ammont kbir ta 'kodiċi tas-sors, u waħda mill-aħjar għodod biex tiġġieledhom hija l-analiżi statika.
PS U bħal dejjem, dan l-iżball għandu tendenza li jidher fl-aħħar ta 'kondizzjoni b'ħafna linji :). Ara l-pubblikazzjoni "L-aħħar effett tal-linja".
Twissija N8
Twissija tal-analizzatur: V3095 [CWE-476] L-oġġett 'installedPackage' intuża qabel ma ġie vverifikat kontra null. Iċċekkja linji: 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)
{
....
}
....
}
Żball klassiku: oġġett l-ewwel Pakkett installat jintuża u mbagħad iċċekkjat għal null. Din id-dijanjostika tgħidilna dwar waħda minn żewġ problemi fil-programm: jew Pakkett installat qatt ugwali null, li huwa dubjuż, u mbagħad il-kontroll ikun żejjed, jew nistgħu potenzjalment niksbu żball serju fil-kodiċi - tentattiv biex naċċessaw referenza nulla.
Konklużjoni
Allura ħadna pass żgħir ieħor - issa l-użu ta 'PVS-Studio sar saħansitra aktar faċli u aktar konvenjenti. Nixtieq ngħid ukoll li Chocolatey huwa maniġer tal-pakkett tajjeb b'numru żgħir ta 'żbalji fil-kodiċi, li jista' jkun saħansitra inqas meta tuża PVS-Studio.
Nistednukom download u pprova PVS-Studio. L-użu regolari ta 'analizzatur statiku se jtejjeb il-kwalità u l-affidabbiltà tal-kodiċi li jiżviluppa t-tim tiegħek u jgħin biex jipprevjeni ħafna vulnerabbiltajiet ta' jum żero.
PS
Qabel il-pubblikazzjoni, bgħatna l-artiklu lill-iżviluppaturi Chocolatey, u rċevewh tajjeb. Aħna ma sibna xejn kritiku, iżda huma, pereżempju, għoġbu l-bug li sibna relatat maċ-ċavetta "api-key".