ProHoster > PVS-Studio er nú í Chocolatey: athugar Chocolatey undir Azure DevOps
PVS-Studio er nú í Chocolatey: athugar Chocolatey undir Azure DevOps
Við höldum áfram að gera notkun PVS-Studio þægilegri. Greiningartækið okkar er nú fáanlegt í Chocolatey, pakkastjóra fyrir Windows. Við teljum að þetta muni auðvelda uppsetningu PVS-Studio, sérstaklega í skýjaþjónustu. Til þess að fara ekki langt skulum við athuga frumkóðann á sama súkkulaði. Azure DevOps mun virka sem CI kerfi.
Hér er listi yfir aðrar greinar okkar um efni samþættingar við skýjakerfi:
Ég ráðlegg þér að fylgjast með fyrstu greininni um samþættingu við Azure DevOps, þar sem í þessu tilfelli er sumum atriðum sleppt til að vera ekki afrit.
Svo, hetjurnar í þessari grein:
PVS-stúdíó er truflanir kóða greiningartæki hannað til að bera kennsl á villur og hugsanlega veikleika í forritum sem eru skrifuð í C, C++, C# og Java. Keyrir á 64 bita Windows, Linux og macOS kerfum og getur greint kóða sem hannaður er fyrir 32 bita, 64 bita og innbyggða ARM palla. Ef þetta er í fyrsta skipti sem þú reynir statíska kóðagreiningu til að athuga verkefnin þín, mælum við með að þú kynnir þér grein um hvernig á að skoða áhugaverðustu PVS-Studio viðvaranirnar fljótt og meta möguleika þessa tóls.
Azure DevOps — safn skýjaþjónustu sem ná sameiginlega yfir allt þróunarferlið. Þessi vettvangur inniheldur verkfæri eins og Azure Pipelines, Azure Boards, Azure Artifacts, Azure Repos, Azure Test Plans, sem gerir þér kleift að flýta fyrir því að búa til hugbúnað og bæta gæði hans.
Súkkulaði er opinn uppspretta pakkastjóri fyrir Windows. Markmið verkefnisins er að gera allan líftíma hugbúnaðarins sjálfvirkan frá uppsetningu til uppfærslu og fjarlægðar á Windows stýrikerfum.
Um að nota súkkulaði
Þú getur séð hvernig á að setja upp pakkastjórann sjálfan á þessu tengill. Fullkomin skjöl fyrir uppsetningu greiningartækisins eru fáanleg á tengill Sjá kaflann Uppsetning með því að nota Chocolatey pakkastjórnunarhlutann. Ég mun í stuttu máli endurtaka nokkur atriði þaðan.
Skipun til að setja upp nýjustu útgáfuna af greiningartækinu:
choco install pvs-studio
Skipun til að setja upp ákveðna útgáfu af PVS-Studio pakkanum:
Sjálfgefið er að aðeins kjarni greiningartækisins, kjarnahlutinn, er settur upp. Hægt er að fara framhjá öllum öðrum fánum (Standalone, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) með því að nota --pakka-breytur.
Dæmi um skipun sem mun setja upp greiningartæki með viðbót fyrir Visual Studio 2019:
Nú skulum við skoða dæmi um þægilega notkun greiningartækisins undir Azure DevOps.
aðlögun
Leyfðu mér að minna þig á að það er sérstakur hluti um mál eins og að skrá reikning, búa til Build Pipeline og samstilla reikninginn þinn við verkefni sem staðsett er í GitHub geymslunni. grein. Uppsetningin okkar mun strax byrja með því að skrifa stillingarskrá.
Í fyrsta lagi skulum við setja upp ræsingu sem gefur til kynna að við ræsum aðeins fyrir breytingar á húsbóndi útibú:
trigger:
- master
Næst þurfum við að velja sýndarvél. Í bili mun það vera umboðsmaður sem hýst er af Microsoft með Windows Server 2019 og Visual Studio 2019:
pool:
vmImage: 'windows-latest'
Við skulum halda áfram að meginmáli stillingarskrárinnar (blokk skref). Þrátt fyrir þá staðreynd að þú getur ekki sett upp handahófskenndan hugbúnað í sýndarvél, bætti ég ekki Docker gámi við. Við getum bætt Chocolatey við sem viðbót fyrir Azure DevOps. Til að gera þetta skulum við fara til tengill. Smellur Fáðu það ókeypis. Næst, ef þú hefur nú þegar heimild, veldu einfaldlega reikninginn þinn, og ef ekki, gerðu það sama eftir heimild.
Hér þarftu að velja hvar við munum bæta við viðbótinni og smella á hnappinn setja.
Eftir vel heppnaða uppsetningu, smelltu á Haltu áfram að skipulagningu:
Þú getur nú séð sniðmátið fyrir Súkkulaðiverkefnið í glugganum verkefni þegar stillingarskrá er breytt azure-pipelines.yml:
Smelltu á Chocolatey og sjáðu lista yfir reiti:
Hér þurfum við að velja setja á vellinum með liðunum. IN Nuspec skráarheiti tilgreindu nafn nauðsynlegs pakka – pvs-studio. Ef þú tilgreinir ekki útgáfuna verður sú nýjasta sett upp, sem hentar okkur algjörlega. Við skulum ýta á takkann bæta við og við munum sjá myndað verkefni í stillingarskránni.
Næst skulum við halda áfram að meginhluta skráar okkar:
- task: CmdLine@2
inputs:
script:
Nú þurfum við að búa til skrá með greiningarleyfinu. Hérna PVSNAME и PVSKEY - nöfn breyta sem við tilgreinum í stillingunum. Þeir munu geyma PVS-Studio innskráningu og leyfislykil. Til að stilla gildi þeirra skaltu opna valmyndina Breytur->Ný breyta. Búum til breytur PVSNAME fyrir innskráningu og PVSKEY fyrir greiningarlykilinn. Ekki gleyma að haka í reitinn Haltu þessu gildi leyndu í PVSKEY. Skipunarkóði:
public abstract class CrytpoHashProviderSpecsBase : TinySpec
{
....
protected CryptoHashProvider Provider;
....
public override void Context()
{
Provider = Provider = new CryptoHashProvider(FileSystem.Object);
}
}
Greiningartækið fann úthlutun breytunnar á sjálfan sig, sem er ekki skynsamlegt. Líklegast ætti að vera einhver önnur í stað einnar af þessum breytum. Jæja, eða þetta er innsláttarvilla og aukaverkefnið er einfaldlega hægt að fjarlægja.
Viðvörun N2
Viðvörun greiningartækis: V3093 [CWE-480] '&' rekstraraðilinn metur báðar operendur. Kannski ætti að nota skammhlaups „&&“ stjórnanda í staðinn. Platform.cs 64
Munur á rekstraraðila & frá rekstraraðila && er að ef vinstri hlið tjáningarinnar er rangar, þá verður hægri hliðin samt reiknuð, sem í þessu tilfelli felur í sér óþarfa aðferðaköll system.directory_isists.
Í brotinu sem skoðað er er þetta smávægilegur galli. Já, þetta ástand er hægt að fínstilla með því að skipta um & stjórnanda fyrir && rekstraraðila, en frá hagnýtu sjónarhorni hefur þetta ekki áhrif á neitt. Hins vegar, í öðrum tilvikum, getur rugl á milli & og && valdið alvarlegum vandamálum þegar hægri hlið tjáningarinnar er meðhöndluð með röngum/ógildum gildum. Til dæmis, í villusafni okkar, auðkennt með V3093 greiningu, það er þetta mál:
if ((k < nct) & (s[k] != 0.0))
Jafnvel þótt vísitalan k er rangt verður það notað til að fá aðgang að fylkiseiningu. Fyrir vikið verður undantekning hent IndexOutOfRangeException.
Viðvaranir N3, N4
Viðvörun greiningartækis: V3022 [CWE-571] Tjáning „shortPrompt“ er alltaf satt. InteractivePrompt.cs 101
Viðvörun greiningartækis: V3022 [CWE-571] Tjáning „shortPrompt“ er alltaf satt. InteractivePrompt.cs 105
Í þessu tilviki er undarleg rökfræði á bak við rekstur þrískiptsins. Skoðum nánar: ef skilyrðið sem ég merkti með númeri 1 er uppfyllt, þá förum við yfir í skilyrði 2, sem er alltaf satt, sem þýðir að lína 3 verður framkvæmd. Ef skilyrði 1 reynist rangt, þá förum við í línuna merkta með númerinu 4, ástandið sem er líka alltaf í satt, sem þýðir að lína 5 verður keyrð. Þannig munu skilyrðin merkt með athugasemd 0 aldrei verða uppfyllt, sem er kannski ekki nákvæmlega sú rökfræði sem forritarinn bjóst við.
Viðvörun N5
Viðvörun greiningartækis: V3123 [CWE-783] Kannski virkar '?:' stjórnandinn á annan hátt en búist var við. Forgangur þess er lægri en annarra rekstraraðila í ástandi þess. 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);
}
}
Þar sem breyt j nokkrar línur fyrir ofan er frumstillt á núll, þá mun þrískiptur rekstraraðili skila gildinu rangar. Vegna þessa ástands verður meginmál lykkjunnar aðeins keyrt einu sinni. Mér sýnist að þetta stykki af kóða virki alls ekki eins og forritarinn ætlaði sér.
Viðvörun N6
Viðvörun greiningartækis: V3022 [CWE-571] Tjáningin 'installedPackageVersions.Count != 1' er alltaf satt. 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);
}
....
}
....
}
Það er undarlegt hreiður ástand hér: installedPackageVersions.Count != 1sem mun alltaf vera satt. Oft gefur slík viðvörun til kynna rökræna villu í kóðanum og í öðrum tilfellum gefur það einfaldlega til kynna óþarfa athugun.
Viðvörun N7
Viðvörun greiningartækis: V3001 Það eru eins undirtjáningar 'commandArguments.contains("-apikey")' vinstra megin og hægra megin við '||' rekstraraðili. ArgumentsUtility.cs 42
Forritarinn sem skrifaði þennan hluta kóðans afritaði og límdi síðustu tvær línurnar og gleymdi að breyta þeim. Vegna þessa gátu Chocolatey notendur ekki notað færibreytuna apikey nokkrar leiðir í viðbót. Svipað og færibreyturnar hér að ofan get ég boðið upp á eftirfarandi valkosti:
Copy-paste villur hafa mikla möguleika á að birtast fyrr eða síðar í hvaða verkefni sem er með mikið magn af frumkóða og eitt besta tólið til að berjast gegn þeim er truflanir.
PS Og eins og alltaf hefur þessi villa tilhneigingu til að birtast í lok marglínu ástands :). Sjá rit "Síðasta lína áhrif".
Viðvörun N8
Viðvörun greiningartækis: V3095 [CWE-476] 'installedPackage' hluturinn var notaður áður en hann var staðfestur gegn núll. Athugaðu línur: 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)
{
....
}
....
}
Klassísk mistök: hlutur fyrst uppsettur pakki er notað og síðan athugað fyrir null. Þessi greining segir okkur frá einu af tveimur vandamálum í forritinu: annað hvort uppsettur pakki aldrei jafn null, sem er vafasamt, og þá er ávísunin óþörf, eða við gætum hugsanlega fengið alvarlega villu í kóðanum - tilraun til að fá aðgang að núlltilvísun.
Ályktun
Þannig að við höfum tekið annað lítið skref - nú er notkun PVS-Studio orðin enn auðveldari og þægilegri. Ég vil líka segja að Chocolatey er góður pakkastjóri með fáar villur í kóðanum, sem gætu verið enn færri þegar PVS-Studio er notað.
Við bjóðum þér sækja og prófaðu PVS-Studio. Regluleg notkun á kyrrstöðugreiningartæki mun bæta gæði og áreiðanleika kóðans sem teymið þitt þróar og koma í veg fyrir marga zero day varnarleysi.
PS
Fyrir birtingu sendum við greinina til Chocolatey hönnuða og tóku þeir vel við henni. Við fundum ekkert mikilvægt, en þeim líkaði til dæmis við villuna sem við fundum tengda „api-key“ lyklinum.