ProHoster > PVS-Studio ass elo am Chocolatey: Check Chocolatey vun ënner Azure DevOps
PVS-Studio ass elo am Chocolatey: Check Chocolatey vun ënner Azure DevOps
Mir maachen weider PVS-Studio méi praktesch ze benotzen. Eis Analyser ass elo verfügbar a Chocolatey, e Package Manager fir Windows. Mir gleewen datt dëst den Détachement vum PVS-Studio erliichtert, besonnesch a Cloud Servicer. Fir net wäit ze goen, loosst eis de Quellcode vum selwechte Chocolatey iwwerpréiwen. Azure DevOps wäert als CI System handelen.
Hei ass eng Lëscht vun eisen aneren Artikelen zum Thema Integratioun mat Cloud Systemer:
Ech roden Iech op den éischten Artikel iwwer d'Integratioun mat Azure DevOps opmierksam ze maachen, well an dësem Fall sinn e puer Punkte ewechgelooss fir net duplizéiert ze ginn.
Also, d'Helden vun dësem Artikel:
PVS-Studio ass e statesche Code Analyse-Tool entwéckelt fir Feeler a potenziell Schwachstelle bei Programmer ze identifizéieren déi an C, C++, C# a Java geschriwwe sinn. Leeft op 64-Bit Windows, Linux, a MacOS Systemer, a kann Code analyséieren entworf fir 32-Bit, 64-Bit an embedded ARM Plattformen. Wann dëst Är éischte Kéier ass eng statesch Code Analyse ze probéieren fir Är Projeten z'iwwerpréiwen, empfeelen mir Iech vertraut ze maachen Artikel iwwer wéi séier déi interessantst PVS-Studio Warnungen ze gesinn an d'Fäegkeete vun dësem Tool bewäerten.
Azure DevOps - eng Rei vu Cloud Servicer déi de ganzen Entwécklungsprozess zesummen decken. Dës Plattform enthält Tools wéi Azure Pipelines, Azure Boards, Azure Artifacts, Azure Repos, Azure Test Pläng, déi Iech erlaben de Prozess vun der Schafung vu Software ze beschleunegen an hir Qualitéit ze verbesseren.
Chocolaté ass en Open Source Package Manager fir Windows. D'Zil vum Projet ass de ganze Software Liewenszyklus vun der Installatioun bis zur Aktualiséierung an der Deinstallatioun op Windows Betribssystemer ze automatiséieren.
Iwwer d'Benotzung vu Chocolatey
Dir kënnt kucken wéi Dir de Package Manager selwer installéiert Link. Komplett Dokumentatioun fir den Analyser z'installéieren ass verfügbar op Link Kuckt d'Installatioun mam Chocolatey Package Manager Sektioun. Ech widderhuelen kuerz e puer Punkte vun do aus.
Kommando fir déi lescht Versioun vum Analysator z'installéieren:
choco install pvs-studio
Kommando fir eng spezifesch Versioun vum PVS-Studio Package z'installéieren:
Par défaut ass nëmmen de Kär vum Analysator, de Core Komponent, installéiert. All aner Fändelen (Standalone, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) kënne mat --package-Parameteren passéiert ginn.
E Beispill vun engem Kommando deen en Analysator mat engem Plugin fir Visual Studio 2019 installéiere wäert:
Loosst eis elo e Beispill vun der praktescher Notzung vum Analyser ënner Azure DevOps kucken.
Upassung
Loosst mech Iech drun erënneren datt et eng separat Sektioun iwwer sou Themen ass wéi e Kont registréieren, eng Build Pipeline erstellen an Äre Kont synchroniséieren mat engem Projet am GitHub Repository. en Artikel. Eise Setup fänkt direkt un mat der Schreiwen vun enger Konfiguratiounsdatei.
Als éischt, loosst eis e Startausléiser opsetzen, wat beweist datt mir nëmme fir Ännerungen starten Meeschtesch branch:
trigger:
- master
Als nächst musse mir eng virtuell Maschinn auswielen. Fir de Moment ass et e Microsoft-hosted Agent mat Windows Server 2019 a Visual Studio 2019:
pool:
vmImage: 'windows-latest'
Loosst eis op de Kierper vun der Konfiguratiounsdatei (Block Schrëtt). Trotz der Tatsaach datt Dir keng arbiträr Software an eng virtuell Maschinn installéiere kënnt, hunn ech keen Docker Container bäigefüügt. Mir kënnen Chocolatey als Extensioun fir Azure DevOps addéieren. Fir dëst ze maachen, loosst eis goen Link. Klickt Kritt et gratis. Als nächst, wann Dir schonn autoriséiert sidd, wielt einfach Äre Kont, a wann net, da maacht datselwecht no der Autorisatioun.
Hei musst Dir wielen wou mir d'Extensioun addéieren a klickt op de Knäppchen installéieren.
No erfollegräicher Installatioun, klickt Gitt weider an d'Organisatioun:
Dir kënnt elo d'Schabloun fir d'Chocolatey Task an der Fënster gesinn Aufgaben wann Dir eng Konfiguratiounsdatei ännert azure-pipelines.yml:
Klickt op Chocolatey a kuckt eng Lëscht vu Felder:
Hei musse mir wielen installéieren am Feld mat den Équipen. IN Nuspec Dateinumm gitt den Numm vum erfuerderleche Package un - pvs-studio. Wann Dir d'Versioun net spezifizéiert, gëtt déi lescht installéiert, wat eis komplett passt. Loosst eis de Knäppchen drécken Foto a mir wäerten déi generéiert Aufgab an der Konfiguratiounsdatei gesinn.
Als nächst, loosst eis op den Haaptdeel vun eiser Datei goen:
- task: CmdLine@2
inputs:
script:
Elo musse mir e Fichier mat der Analyser Lizenz erstellen. Hei PVSNAME и PVSKEY - Nimm vu Variabelen deenen hir Wäerter mir an den Astellunge spezifizéieren. Si späicheren de PVS-Studio Login a Lizenzschlëssel. Fir hir Wäerter ze setzen, öffnen de Menü Variablen-> Nei Variabel. Loosst eis Variabelen erstellen PVSNAME fir Login an PVSKEY fir den Analyser Schlëssel. Vergiesst net d'Këscht ze kontrolléieren Halt dëse Wäert geheim fir PVSKEY. Kommando Code:
Loosst eis klickt Späicheren->Späicheren-> Run fir d'Aufgab auszeféieren. Loosst eis de Bericht eroflueden andeems Dir op d'Aufgaben Tab gitt.
De Chocolatey Projet enthält nëmmen 37615 Zeilen C # Code. Loosst eis e puer vun de fonnte Feeler kucken.
Test Resultater
Warnung N1
Analyser Warnung: V3005 D'Variabel 'Provider' gëtt u sech selwer zougewisen. CrytpoHashProviderSpecs.cs 38
public abstract class CrytpoHashProviderSpecsBase : TinySpec
{
....
protected CryptoHashProvider Provider;
....
public override void Context()
{
Provider = Provider = new CryptoHashProvider(FileSystem.Object);
}
}
Den Analyser huet eng Uweisung vun der Variabel fir sech selwer entdeckt, wat net Sënn mécht. Wahrscheinlech, amplaz vun enger vun dëse Variabelen sollt et eng aner sinn. Gutt, oder dëst ass en Tippfeeler, an déi extra Aufgab kann einfach ewechgeholl ginn.
Warnung N2
Analyser Warnung: V3093 [CWE-480] Den '&' Bedreiwer evaluéiert béid Operander. Vläicht sollt amplaz e Kuerzschluss '&&' Bedreiwer benotzt ginn. Plattform.cs 64
Bedreiwer Ënnerscheed & vum Bedreiwer && ass, datt wann déi lénks Säit vum Ausdrock ass falsch, da gëtt d'Recht Säit nach berechent, wat an dësem Fall onnéideg Method Appellen implizéiert system.directory_exists.
Am Fragment berücksichtegt ass dëst e klenge Feeler. Jo, dës Conditioun kann optiméiert ginn andeems den & Bedreiwer duerch den && Bedreiwer ersat gëtt, awer aus praktescher Siicht beaflosst dëst näischt. Wéi och ëmmer, an anere Fäll kann d'Verwirrung tëscht & an && sérieux Probleemer verursaachen wann déi riets Säit vum Ausdrock mat falschen/ongëlteg Wäerter behandelt gëtt. Zum Beispill, an eiser Feelersammlung, identifizéiert mat der V3093 Diagnostik, et gëtt dëse Fall:
if ((k < nct) & (s[k] != 0.0))
Och wann den Index k falsch ass, gëtt et benotzt fir Zougang zu engem Arrayelement ze kréien. Als Resultat gëtt eng Ausnam geworf IndexOutOfRangeException.
Warnungen N3, N4
Analyser Warnung: V3022 [CWE-571] Ausdrock 'shortPrompt' ass ëmmer wouer. InteractivePrompt.cs 101
Analyser Warnung: V3022 [CWE-571] Ausdrock 'shortPrompt' ass ëmmer wouer. InteractivePrompt.cs 105
An dësem Fall gëtt et eng komesch Logik hannert der Operatioun vum ternäre Bedreiwer. Kucke mer méi genee: wann d'Konditioun erfëllt ass, déi ech mat der Nummer 1 markéiert hunn, da gi mer op d'Konditioun 2, déi ëmmer ass richteg, dat heescht datt d'Linn 3 ausgeführt gëtt. Wann d'Konditioun 1 falsch ass, da gi mer op d'Linn mat der Nummer 4 markéiert, an deem Zoustand ass och ëmmer richteg, dat heescht datt d'Linn ausgefouert gëtt 5. Sou ginn d'Konditioune markéiert mam Commentaire 0 ni erfëllt, wat vläicht net genau d'Logik vun der Operatioun ass, déi de Programméierer erwaart huet.
Warnung N5
Analyser Warnung: V3123 [CWE-783] Vläicht funktionnéiert den '?:' Bedreiwer op eng aner Manéier wéi et erwaart gouf. Seng Prioritéit ass manner wéi d'Prioritéit vun anere Betreiber a sengem Zoustand. 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);
}
}
Zënter der Variabel j e puer Zeilen uewen ass op Null initialiséiert, den ternäre Bedreiwer gëtt de Wäert zréck falsch. Wéinst dëser Konditioun gëtt de Kierper vun der Loop nëmmen eemol ausgefouert. Et schéngt mir datt dëst Stéck Code guer net funktionnéiert wéi de Programméierer geduecht huet.
Warnung N6
Analyser Warnung: V3022 [CWE-571] Ausdrock 'installedPackageVersions.Count != 1' ass ëmmer wouer. 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);
}
....
}
....
}
Et gëtt e komeschen nestéierten Zoustand hei: installedPackageVersions.Count != 1déi ëmmer wäert sinn richteg. Dacks weist esou eng Warnung e logesche Feeler am Code un, an an anere Fäll gëtt et einfach iwwerflësseg Kontrollen.
Warnung N7
Analyser Warnung: V3001 Et gi identesch Ënnerausdréck 'commandArguments.contains ("-apikey")' lénks a riets vum '||' Bedreiwer. ArgumentsUtility.cs 42
De Programméierer, deen dës Sektioun vum Code geschriwwen huet, huet déi lescht zwou Zeilen kopéiert a gepecht a vergiess se z'änneren. Wéinst dësem konnten d'Chocolatey Benotzer de Parameter net applizéieren apikey e puer méi Weeër. Ähnlech wéi d'Parameteren hei uewen, kann ech déi folgend Optiounen ubidden:
Copy-Paste Feeler hunn eng héich Chance fir fréier oder spéider an all Projet mat enger grousser Quantitéit vu Quellcode ze erschéngen, an ee vun de beschten Tools fir se ze bekämpfen ass statesch Analyse.
PS A wéi ëmmer tendéiert dëse Feeler um Enn vun enger Multi-Line Conditioun ze erschéngen :). Kuckt d'Publikatioun "Last Linn Effekt".
Warnung N8
Analyser Warnung: V3095 [CWE-476] Den 'installedPackage' Objet gouf benotzt ier et géint null verifizéiert gouf. Kontroll Linnen: 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)
{
....
}
....
}
Klassesche Feeler: Objet éischt installéiertPackage gëtt benotzt an dann iwwerpréift wäert. Dës Diagnostik erzielt eis iwwer ee vun zwee Probleemer am Programm: entweder installéiertPackage ni gläich wäert, wat zweifelhaft ass, an dann ass de Scheck iwwerflësseg, oder mir kéinte potenziell e seriöse Feeler am Code kréien - e Versuch op eng Null Referenz ze kréien.
Konklusioun
Also hu mir e weidere klenge Schrëtt gemaach - elo ass d'Benotzung vum PVS-Studio nach méi einfach a méi praktesch ginn. Ech wéilt och soen datt Chocolatey e gudde Package Manager ass mat enger klenger Zuel vu Feeler am Code, déi nach manner kënne sinn wann Dir PVS-Studio benotzt.
Mir invitéieren Iech скачать a probéieren PVS-Studio. Regelméisseg Notzung vun engem statesche Analysator verbessert d'Qualitéit an Zouverlässegkeet vum Code deen Äert Team entwéckelt an hëlleft vill ze verhënneren. Null Dag Schwachstelle.
PS
Virun der Verëffentlechung hu mir den Artikel un d'Chocolatey Entwéckler geschéckt, a si kruten et gutt. Mir hunn näischt kritesch fonnt, awer si hunn zum Beispill de Käfer gefall, dee mir am Zesummenhang mam "api-key" Schlëssel fonnt hunn.