ProHoster > PVS-Studio dia ao amin'ny Chocolatey izao: manamarina Chocolatey avy amin'ny Azure DevOps
PVS-Studio dia ao amin'ny Chocolatey izao: manamarina Chocolatey avy amin'ny Azure DevOps
Manohy manao ny fampiasana PVS-Studio ho mora kokoa izahay. Misy amin'izao fotoana izao ny mpandinika anay ao amin'ny Chocolatey, mpitantana fonosana ho an'ny Windows. Mino izahay fa hanamora ny fametrahana ny PVS-Studio izany, indrindra amin'ny serivisy rahona. Mba tsy ho lasa lavitra, andeha hojerentsika ny source code an'io Chocolatey io. Azure DevOps dia hiasa ho rafitra CI.
Ity misy lisitry ny lahatsoratray hafa momba ny lohahevitra fampidirana amin'ny rafitra rahona:
Manoro hevitra anao aho mba handinika ny lahatsoratra voalohany momba ny fampidirana amin'ny Azure DevOps, satria amin'ity tranga ity dia misy teboka sasany nesorina mba tsy ho adika.
Noho izany, ny mahery fo amin'ity lahatsoratra ity:
PVS Studio dia fitaovana famakafakana kaody static natao hamantarana ny lesoka sy ny vulnerability mety hitranga amin'ny programa voasoratra amin'ny C, C++, C# ary Java. Mandeha amin'ny rafitra Windows, Linux, ary macOS 64-bit, ary afaka mamakafaka ny kaody natao ho an'ny sehatra ARM 32-bit, 64-bit, ary napetaka. Raha vao sambany ianao no nanandrana famakafakana kaody static hanamarinana ny tetikasanao, dia manoro hevitra anao izahay mba hahalalanao ny tenanao lahatsoratra momba ny fomba hijerena haingana ny fampitandremana PVS-Studio mahaliana indrindra ary manombana ny fahaizan'ity fitaovana ity.
Azure DevOps β andiana tolotra rahona izay miara-manarona ny dingana fampandrosoana manontolo. Ity sehatra ity dia ahitana fitaovana toy ny Azure Pipelines, Azure Boards, Azure Artifacts, Azure Repos, Azure Test Plans, izay ahafahanao manafaingana ny fizotran'ny famoronana rindrambaiko sy manatsara ny kalitaony.
Chocolate ary dia mpitantana fonosana loharano misokatra ho an'ny Windows. Ny tanjon'ny tetikasa dia ny hanamboatra ho azy ny fiainan'ny rindrambaiko manontolo manomboka amin'ny fametrahana ka hatramin'ny fanavaozana sy ny fanesorana amin'ny rafitra fiasa Windows.
Momba ny fampiasana Chocolatey
Azonao jerena ny fomba fametrahana ny mpitantana ny fonosana amin'ity rohy. Ny antontan-taratasy feno momba ny fametrahana ny analyse dia azo jerena ao amin'ny rohy Jereo ny Fametrahana mampiasa ny fizarana Chocolatey package manager. Averiko fohifohy ny hevitra sasany avy eo.
Amin'ny alΓ lan'ny default, ny fototry ny mpandinika, ny singa Core, no napetraka. Ny saina hafa rehetra (Standalone, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) dia azo alefa amin'ny fampiasana --package-parameters.
Ohatra iray amin'ny baiko izay hametraka mpandinika miaraka amin'ny plugin ho an'ny Visual Studio 2019:
Andeha hojerentsika ny ohatra iray amin'ny fampiasana mora ny mpandinika eo ambanin'ny Azure DevOps.
fanitsiana
MamelΓ ahy hampahatsiahy anao fa misy fizarana manokana momba ny olana toy ny fisoratana anarana kaonty, ny famoronana Build Pipeline ary ny fampifanarahana ny kaontinao amin'ny tetikasa iray hita ao amin'ny tahiry GitHub. lahatsoratra. Hanomboka avy hatrany amin'ny fanoratana rakitra fichier ny fanamboarana.
Voalohany, andeha isika hametraka trigger fanombohana, izay manondro fa ho an'ny fanovana ihany no hanombohana tompony sampana:
trigger:
- master
Avy eo dia mila mifidy milina virtoaly isika. Amin'izao fotoana izao dia ho mpiasan'ny Microsoft miaraka amin'ny Windows Server 2019 sy Visual Studio 2019:
pool:
vmImage: 'windows-latest'
Andeha isika hiroso amin'ny vatan'ny fichier configuration (block dingana). Na dia eo aza ny zava-misy fa tsy afaka mametraka rindrambaiko tsy misy dikany amin'ny milina virtoaly ianao, dia tsy nanampy container Docker aho. Azontsika atao ny manampy Chocolatey ho fanitarana ny Azure DevOps. Mba hanaovana izany, andeha ho any rohy. tsindrio Ento maimaimpoana. Manaraka, raha efa nahazo alalana ianao dia fidio fotsiny ny kaontinao, ary raha tsy izany dia ataovy toy izany koa aorian'ny fanomezan-dΓ lana.
Eto ianao dia mila misafidy izay hampidirana ny fanitarana ary tsindrio ny bokotra hametraka.
Rehefa vita ny fametrahana dia tsindrio Mandehana any amin'ny organisation:
Azonao atao ny mahita ny mΓ΄dely ho an'ny asa Chocolatey eo amin'ny varavarankely asa rehefa manitsy fisie fanamafisana azure-pipelines.yml:
Kitiho ny Chocolatey ary jereo ny lisitry ny saha:
Eto isika dia mila misafidy hametraka eny an-kianja miaraka amin'ireo ekipa. IN Anaran'ny fisie Nuspec manondro ny anaran'ny fonosana ilaina - pvs-studio. Raha tsy mamaritra ny dikan-teny ianao dia hapetraka ny farany, izay mifanaraka aminay tanteraka. Aleo tsindrio ny bokotra hametraka ary ho hitantsika ao amin'ny fichier configuration ny asa novokarina.
Ankehitriny dia mila mamorona rakitra miaraka amin'ny fahazoan-dΓ lana analyzer isika. Eto PVSNAME ΠΈ PVSKEY - anaran'ny fari-piadidiana izay faritanay ao amin'ny toe-javatra ny sandany. Hitahiry ny fidirana PVS-Studio sy ny fanalahidin'ny fahazoan-dΓ lana izy ireo. Mba hametrahana ny sandany dia sokafy ny sakafo Variables-> Variable vaovao. Andao hamorona variables PVSNAME ho an'ny fidirana ary PVSKEY ho an'ny fanalahidin'ny analyse. Aza adino ny manamarina ny boaty Ataovy tsiambaratelo izany sanda izany ho an'ny PVSKEY. Kaody baiko:
Aleo tsindrio Save-> Save-> Run hamita ny asa. Andao hisintona ny tatitra amin'ny alΓ lan'ny fandehanana any amin'ny tabilao asa.
Ny tetikasa Chocolatey dia tsy misy afa-tsy 37615 andalana C # code. Andeha hojerentsika ny sasany amin'ireo fahadisoana hita.
Valin'ny fitsapana
Fampitandremana N1
Fampitandremana mpandinika: V3005 Ny fari-piadidiana 'mpanome' dia voatendry ho azy. CrytpoHashProviderSpecs.cs 38
public abstract class CrytpoHashProviderSpecsBase : TinySpec
{
....
protected CryptoHashProvider Provider;
....
public override void Context()
{
Provider = Provider = new CryptoHashProvider(FileSystem.Object);
}
}
Ny mpandinika dia nahita fanendrena ny fari-piainana ho azy, izay tsy mitombina. Azo inoana fa tokony hisy iray hafa ho solon'ny iray amin'ireo variable ireo. Eny, na diso izany, ary azo esorina tsotra izao ny fanendrena fanampiny.
Fahasamihafana amin'ny mpandraharaha & avy amin'ny mpandraharaha && dia hoe raha ny ilany havia amin'ny fitenenana dia diso, dia mbola ho kajy ny ilany havanana, izay amin'ity tranga ity dia midika fomba tsy ilaina antso system.directory_exists.
Ao amin'ny sombiny nodinihina dia lesoka kely izany. Eny, ity toe-javatra ity dia azo amboarina amin'ny fanoloana ny & operator amin'ny && operator, fa raha ny fomba fijery azo ampiharina dia tsy misy fiantraikany na inona na inona izany. Na izany aza, amin'ny toe-javatra hafa, ny fisafotofotoana eo amin'ny & sy && dia mety hiteraka olana lehibe rehefa raisina amin'ny soatoavina diso/tsy mety ny ilany havanana amin'ny fiteny. Ohatra, ao amin'ny fanangonanay fahadisoana, fantatra amin'ny fampiasana ny diagnostika V3093, misy ity tranga ity:
if ((k < nct) & (s[k] != 0.0))
Na dia ny index k dia diso, dia hampiasaina hidirana singa iray. Vokatr'izany dia hisy ny fanavahana IndexOutOfRangeException.
Amin'ity tranga ity, misy lojika hafahafa ao ambadiky ny fiasan'ny operatera ternary. Andeha hojerentsika akaiky: raha feno ny fepetra nomarihiko tamin'ny laharana 1 dia hiroso amin'ny fepetra 2 isika, izay foana. marina, izay midika fa hotanterahina ny andalana 3. Raha toa ka diso ny fepetra 1, dia hifindra any amin'ny tsipika misy marika 4 isika, ny fepetra izay misy foana koa. marina, izay midika fa hotanterahina ny andalana 5. Noho izany, ny fepetra voamarika amin'ny fanehoan-kevitra 0 dia tsy ho tanteraka na oviana na oviana, izay mety tsy ho ny lojikan'ny asa izay nandrasan'ny programmer.
Fampitandremana N5
Fampitandremana mpandinika: V3123 [CWE-783] Angamba ny '?:' dia miasa amin'ny fomba hafa tsy araka ny nantenaina. Ny laharam-pahamehany dia ambany noho ny laharam-pahamehan'ny mpandraharaha hafa amin'ny toe-javatra misy azy. 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);
}
}
Avy amin'ny variable j andalana vitsivitsy etsy ambony dia natomboka ho aotra, ny operatera ternary dia hamerina ny sandany diso. Noho io toe-javatra io, ny vatan'ny loop dia hovonoina indray mandeha ihany. Raha ny fahitako azy dia tsy mandeha araka ny nokasain'ny programmer io kaody io.
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);
}
....
}
....
}
Misy toe-javatra hafahafa eto: installPackageVersions.Count != 1izay ho foana marina. Matetika ny fampitandremana toy izany dia manondro fahadisoana lojika ao amin'ny kaody, ary amin'ny tranga hafa dia manondro fotsiny ny fanamarinana miverimberina.
Fampitandremana N7
Fampitandremana mpandinika: V3001 Misy zana-teny mitovy 'commandArguments.contains("-apikey")' eo ankavia sy eo ankavanan'ny '||' mpandraharaha. ArgumentsUtility.cs 42
Ny fahadisoana amin'ny kopia mametaka dia manana vintana lehibe hiseho na ho ela na ho haingana amin'ny tetikasa rehetra misy kaody loharano be dia be, ary ny iray amin'ireo fitaovana tsara indrindra hiadiana amin'izy ireo dia ny fanadihadiana static.
PS Ary toy ny mahazatra, ity hadisoana ity dia matetika miseho amin'ny faran'ny fepetra maromaro :). Jereo ny publication "Vokatry ny andalana farany".
Fampitandremana N8
Fampitandremana mpandinika: V3095 [CWE-476] Ny zavatra 'installedPackage' dia nampiasaina talohan'ny nanamarinana azy tamin'ny null. Jereo ny tsipika: 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)
{
....
}
....
}
Fahadisoana mahazatra: zavatra voalohany installPackage dia ampiasaina ary avy eo manamarina tohivakana foana. Ity diagnostika ity dia milaza amintsika momba ny iray amin'ireo olana roa ao amin'ny programa: na installPackage tsy mitovy velively tohivakana foana, izay mampiahiahy, ary avy eo dia mihemotra ny taratasim-panamarinana, na mety hisy hadisoana lehibe amin'ny fehezan-dalΓ na - fiezahana hidirana reference tsy misy dikany.
famaranana
Noho izany dia nanao dingana kely hafa izahay - ny fampiasana PVS-Studio dia lasa mora kokoa sy mora kokoa. Te-hilaza ihany koa aho fa Chocolatey dia mpitantana fonosana tsara misy lesoka kely ao amin'ny code, izay mety ho vitsy kokoa rehefa mampiasa PVS-Studio.
Manasa anao izahay ΡΠΊΠ°ΡΠ°ΡΡ ary andramo ny PVS-Studio. Ny fampiasana tsy tapaka ny mpanadihady static dia hanatsara ny kalitao sy ny fahamendrehan'ny kaody namboarin'ny ekipanao ary hanampy amin'ny fisorohana ny maro vulnerability zero andro.
Sal
Talohan'ny namoahana azy dia nalefanay tany amin'ireo mpamorona Chocolatey ilay lahatsoratra, ary noraisin'izy ireo tsara. Tsy nahita na inona na inona mitsikera izahay, fa izy ireo, ohatra, dia tia ilay bibikely hitanay mifandraika amin'ny famaha "api-key".