Tá PVS-Studio i Chocolatey anois: ag seiceáil Chocolatey ó faoi Azure DevOps

Tá PVS-Studio i Chocolatey anois: ag seiceáil Chocolatey ó faoi Azure DevOps
Leanaimid orainn ag déanamh úsáid PVS-Studio níos áisiúla. Tá ár n-anailíseoir ar fáil anois i Chocolatey, bainisteoir pacáiste do Windows. Creidimid go n-éascóidh sé seo imscaradh PVS-Studio, go háirithe, i seirbhísí scamall. Chun nach dtéann tú i bhfad, déanaimis cód foinse an Chocolatey céanna a sheiceáil. Gníomhóidh Azure DevOps mar chóras CI.

Seo liosta dár n-alt eile ar an ábhar comhtháthú le córais néal:

Molaim duit aird a thabhairt ar an gcéad alt faoi chomhtháthú le Azure DevOps, ós rud é sa chás seo go bhfágtar roinnt pointí ar lár ionas nach ndéanfar iad a mhacasamhlú.

Mar sin, laochra an ailt seo:

Stiúideo PVS Is uirlis anailíse cód statach é atá deartha chun earráidí agus leochaileachtaí féideartha a aithint i gcláir atá scríofa in C, C++, C# agus Java. Ritheann sé ar chórais 64-giotán Windows, Linux, agus macOS, agus is féidir anailís a dhéanamh ar chód atá deartha le haghaidh ardáin ARM 32-giotán, 64-giotán agus leabaithe. Más é seo do chéad uair ag baint úsáide as anailís cód statach chun do thionscadail a sheiceáil, molaimid duit dul i dtaithí air alt faoi ​​conas na rabhaidh PVS-Studio is suimiúla a fheiceáil go tapa agus cumas na huirlise seo a mheas.

Azure DevOps — sraith de néalseirbhísí a chumhdaíonn an próiseas forbartha iomlán i gcomhpháirt. Áirítear leis an ardán seo uirlisí cosúil le Píblínte Azure, Boird Azure, Azure Artifacts, Azure Repos, Pleananna Tástála Azure, a ligeann duit an próiseas a bhaineann le bogearraí a chruthú a bhrostú agus a cháilíocht a fheabhsú.

Chocolatey is bainisteoir pacáiste foinse oscailte é do Windows. Is é sprioc an tionscadail saolré iomlán na mbogearraí a uathoibriú ó shuiteáil go nuashonrú agus díshuiteáil ar chórais oibriúcháin Windows.

Faoi úsáid Chocolatey

Is féidir leat a fheiceáil conas an bainisteoir pacáiste féin a shuiteáil ag seo nasc. Tá doiciméadú iomlán maidir le suiteáil an anailísí ar fáil ag nasc Féach ar an Suiteáil ag baint úsáide as an rannóg bainisteoir pacáiste Chocolatey. Déanfaidh mé roinnt pointí arís go hachomair as sin.

Ordú chun an leagan is déanaí den anailíseoir a shuiteáil:

choco install pvs-studio

Ordú chun leagan sonrach den phacáiste PVS-Studio a shuiteáil:

choco install pvs-studio --version=7.05.35617.2075

De réir réamhshocraithe, níl ach croí an anailíseora, an chomhpháirt Core, suiteáilte. Is féidir gach bratach eile (Standalone, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) a rith ag baint úsáide as --pacáiste-paraiméadair.

Sampla d’ordú a shuiteálfaidh anailísí le breiseán do Visual Studio 2019:

choco install pvs-studio --package-parameters="'/MSVS2019'"

Anois, déanaimis féachaint ar shampla d'úsáid áisiúil an anailísí faoi Azure DevOps.

coigeartú

Lig dom a mheabhrú duit go bhfuil alt ar leith ann faoi shaincheisteanna mar chuntas a chlárú, Píblíne Tógála a chruthú agus do chuntas a shioncronú le tionscadal atá suite i stór GitHub. airteagal. Tosóidh ár socrú láithreach le comhad cumraíochta a scríobh.

Ar dtús, déanaimis truicear seolta a bhunú, rud a thugann le fios nach bhfuilimid ag seoladh ach amháin le haghaidh athruithe isteach máistir géaga:

trigger:
- master

Ansin ní mór dúinn meaisín fíorúil a roghnú. Faoi láthair beidh sé ina ghníomhaire arna óstáil ag Microsoft le Windows Server 2019 agus Visual Studio 2019:

pool:
  vmImage: 'windows-latest'

A ligean ar bogadh ar aghaidh go dtí an comhlacht ar an comhad cumraíochta (bloc céimeanna). In ainneoin nach féidir leat bogearraí treallach a shuiteáil i meaisín fíorúil, níor chuir mé coimeádán Docker leis. Is féidir linn Chocolatey a chur leis mar shíneadh do Azure DevOps. Chun seo a dhéanamh, a ligean ar dul go dtí nasc. Cliceáil Faigh saor in aisce é. Ansin, má tá tú údaraithe cheana féin, roghnaigh do chuntas, agus mura bhfuil, déan an rud céanna tar éis údarú.

Tá PVS-Studio i Chocolatey anois: ag seiceáil Chocolatey ó faoi Azure DevOps

Anseo ní mór duit a roghnú nuair a chuirfimid an síneadh agus cliceáil ar an gcnaipe shuiteáil.

Tá PVS-Studio i Chocolatey anois: ag seiceáil Chocolatey ó faoi Azure DevOps

Tar éis suiteáil rathúil, cliceáil Ar aghaidh chuig eagraíocht:

Tá PVS-Studio i Chocolatey anois: ag seiceáil Chocolatey ó faoi Azure DevOps

Is féidir leat an teimpléad don tasc Chocolatey a fheiceáil anois san fhuinneog tascanna agus comhad cumraíochta á chur in eagar azure-píblínte.yml:

Tá PVS-Studio i Chocolatey anois: ag seiceáil Chocolatey ó faoi Azure DevOps

Cliceáil ar Chocolatey agus féach liosta réimsí:

Tá PVS-Studio i Chocolatey anois: ag seiceáil Chocolatey ó faoi Azure DevOps

Anseo ní mór dúinn a roghnú shuiteáil sa pháirc leis na foirne. IN Ainm Comhad Nuspec cuir in iúl ainm an phacáiste riachtanach - pvs-studio. Mura sonraíonn tú an leagan, déanfar an ceann is déanaí a shuiteáil, rud a oireann dúinn go hiomlán. A ligean ar brúigh an cnaipe cuir agus feicfimid an tasc a ghintear sa chomhad cumraíochta.

steps:
- task: ChocolateyCommand@0
  inputs:
    command: 'install'
    installPackageId: 'pvs-studio'

Ansin, bogaimis ar aghaidh go dtí an phríomhchuid dár gcomhad:

- task: CmdLine@2
  inputs:
    script: 

Anois ní mór dúinn comhad a chruthú leis an gceadúnas anailíseora. Anseo PVSNAME и PVSKEY – ainmneacha na n-athróg a sonraímid a luachanna sna socruithe. Stórálfaidh siad logáil isteach PVS-Studio agus eochair ceadúnais. Chun a luachanna a shocrú, oscail an roghchlár Athróga-> Athróg nua. A ligean ar a chruthú athróga PVSNAME le haghaidh logáil isteach agus PVSKEY le haghaidh an eochair anailíseoir. Ná déan dearmad an bosca a sheiceáil Coinnigh an luach seo faoi rún le haghaidh PVSKEY. Cód ordú:

сall "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" credentials 
–u $(PVSNAME) –n $(PVSKEY)

Déanaimis an tionscadal a thógáil ag baint úsáide as an gcomhad ialtóg atá suite sa stór:

сall build.bat

Cruthaímid fillteán ina stórálfar comhaid le torthaí an anailíseora:

сall mkdir PVSTestResults

Cuirimis tús le hanailís a dhéanamh ar an tionscadal:

сall "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" 
–t .srcchocolatey.sln –o .PVSTestResultsChoco.plog 

Déanaimid ár dtuairisc a thiontú go formáid html ag baint úsáide as an bhfóntas Plogіonverter:

сall "C:Program Files (x86)PVS-StudioPlogConverter.exe" 
–t html –o PVSTestResults .PVSTestResultsChoco.plog

Anois ní mór duit tasc a chruthú ionas gur féidir leat an tuarascáil a uaslódáil.

- task: PublishBuildArtifacts@1
  inputs:
    pathToPublish: PVSTestResults
    artifactName: PVSTestResults
    condition: always()

Breathnaíonn an comhad cumraíochta iomlán mar seo:

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: ChocolateyCommand@0
  inputs:
    command: 'install'
    installPackageId: 'pvs-studio'

- task: CmdLine@2
  inputs:
    script: |
      call "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" 
      credentials –u $(PVSNAME) –n $(PVSKEY)
      call build.bat
      call mkdir PVSTestResults
      call "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" 
      –t .srcchocolatey.sln –o .PVSTestResultsChoco.plog
      call "C:Program Files (x86)PVS-StudioPlogConverter.exe" 
      –t html –o .PVSTestResults .PVSTestResultsChoco.plog

- task: PublishBuildArtifacts@1
  inputs:
    pathToPublish: PVSTestResults
    artifactName: PVSTestResults
    condition: always()

A ligean ar cliceáil Sábháil-> Sábháil-> Rith chun an tasc a rith. Déanaimis an tuarascáil a íoslódáil ag dul go dtí an táb tascanna.

Tá PVS-Studio i Chocolatey anois: ag seiceáil Chocolatey ó faoi Azure DevOps

Níl ach 37615 líne de chód C# sa tionscadal Chocolatey. Breathnaímid ar chuid de na hearráidí a aimsíodh.

Torthaí tástála

Rabhadh N1

Rabhadh anailíseora: V3005 Sanntar an athróg ‘Soláthraí’ dó féin. CrytpoHashProviderSpecs.cs 38

public abstract class CrytpoHashProviderSpecsBase : TinySpec
{
  ....
  protected CryptoHashProvider Provider;
  ....
  public override void Context()
  {
    Provider = Provider = new CryptoHashProvider(FileSystem.Object);
  }
}

Bhraith an anailíseoir sannadh an athróg dó féin, rud nach bhfuil ciall leis. Is dócha, in ionad ceann amháin de na hathróga seo, ba cheart go mbeadh ceann eile ann. Bhuel, nó is clóscríobh é seo, agus is féidir an tasc breise a bhaint go simplí.

Rabhadh N2

Rabhadh anailíseora: V3093 [CWE-480] Déanann an t-oibreoir '&' an dá oibríocht a mheas. B'fhéidir gur cheart oibreoir '&&' gearrchiorcaid a úsáid ina ionad sin. Ardán.cs 64

public static PlatformType get_platform()
{
  switch (Environment.OSVersion.Platform)
  {
    case PlatformID.MacOSX:
    {
      ....
    }
    case PlatformID.Unix:
    if(file_system.directory_exists("/Applications")
      & file_system.directory_exists("/System")
      & file_system.directory_exists("/Users")
      & file_system.directory_exists("/Volumes"))
      {
        return PlatformType.Mac;
      }
        else
          return PlatformType.Linux;
    default:
      return PlatformType.Windows;
  }
}

Difríocht oibreora & ón oibreoir && is é sin má tá an taobh clé den slonn bréagach, ansin déanfar an taobh dheis a ríomh go fóill, rud a thugann le tuiscint sa chás seo glaonna modh gan ghá córas.directory_ann.

Sa blúire a mheastar, is locht beag é seo. Sea, is féidir an coinníoll seo a bharrfheabhsú tríd an oibreoir && a chur in ionad an & oibreoir, ach ó thaobh praiticiúil de, ní chuireann sé seo isteach ar rud ar bith. I gcásanna eile, áfach, féadann mearbhaill idir & & && fadhbanna tromchúiseacha a chruthú nuair a chaitear le taobh deas na slonn le luachanna míchearta/neamhbhailí. Mar shampla, inár mbailiúchán earráidí, aitheanta ag baint úsáide as an diagnóisic V3093, tá an cás seo ann:

if ((k < nct) & (s[k] != 0.0))

Fiú má tá an t-innéacs k mícheart, úsáidfear é chun teacht ar eilimint eagar. Mar thoradh air sin, beidh eisceacht a chaitheamh IndexOutOfRangeEisceacht.

Rabhaidh N3, N4

Rabhadh anailíseora: V3022 [CWE-571] Tá an abairt ‘shortPrompt’ fíor i gcónaí. InteractivePrompt.cs 101
Rabhadh anailíseora: V3022 [CWE-571] Tá an abairt ‘shortPrompt’ fíor i gcónaí. InteractivePrompt.cs 105

public static string 
prompt_for_confirmation(.... bool shortPrompt = false, ....)
{
  ....
  if (shortPrompt)
  {
    var choicePrompt = choice.is_equal_to(defaultChoice) //1
    ?
    shortPrompt //2
    ?
    "[[{0}]{1}]".format_with(choice.Substring(0, 1).ToUpperInvariant(), //3
    choice.Substring(1,choice.Length - 1))
    :
    "[{0}]".format_with(choice.ToUpperInvariant()) //0
    : 
    shortPrompt //4
    ? 
    "[{0}]{1}".format_with(choice.Substring(0,1).ToUpperInvariant(), //5
    choice.Substring(1,choice.Length - 1)) 
    :
    choice; //0
    ....
  }
  ....
}

Sa chás seo, tá loighic aisteach taobh thiar d’oibriú an oibreora ternary. Déanaimis breathnú níos dlúithe: má chomhlíontar an coinníoll a mharcáil mé le huimhir 1, ansin bogfaimid ar aghaidh go dtí coinníoll 2, atá i gcónaí fíor, rud a chiallaíonn go ndéanfar líne 3. Má tharlaíonn go bhfuil coinníoll 1 bréagach, ansin rachaimid go dtí an líne marcáilte le huimhir 4, tá an coinníoll ina bhfuil i gcónaí freisin fíor, a chiallaíonn go ndéanfar líne 5. Dá bhrí sin, ní chomhlíonfar na coinníollacha a bhfuil trácht 0 orthu go brách, agus b’fhéidir nach é sin an loighic oibríochta go díreach a raibh an ríomhchláraitheoir ag súil leis.

Rabhadh N5

Rabhadh anailíseora: V3123 [CWE-783] B’fhéidir go n-oibríonn an t-oibreoir ‘?:’ ar bhealach difriúil ná mar a bhíothas ag súil leis. Tá an tosaíocht atá aige níos ísle ná tosaíocht oibreoirí eile ina riocht. Roghanna.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);
  }
}

D'oibrigh an diagnóis don líne:

while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false)

Ós rud é an athróg j tá cúpla líne thuas tosaithe go nialas, beidh an t-oibreoir trínártha ar ais ar an luach bréagach. Mar gheall ar an gcoinníoll seo, ní dhéanfar comhlacht an lúb a fhorghníomhú ach uair amháin. Feictear dom nach n-oibríonn an píosa cód seo ar chor ar bith mar a bhí beartaithe ag an ríomhchláraitheoir.

Rabhadh N6

Rabhadh anailíseora: V3022 [CWE-571] Tá an slonn 'installedPackageVersions.Count!= 1' fíor i gcónaí. 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);
    }
    ....
  }
  ....
}

Tá riocht neadaithe aisteach anseo: installPackageVersions.Count != 1a bheidh i gcónaí fíor. Go minic léiríonn rabhadh den sórt sin earráid loighciúil sa chód, agus i gcásanna eile ní léiríonn sé ach seiceáil iomarcach.

Rabhadh N7

Rabhadh anailíseora: V3001 Tá fo-léirithe comhionanna 'commandArguments.contains("-apikey")' ar chlé agus ar dheis den '||' oibreoir. ArgóintíUtility.cs 42

public static bool arguments_contain_sensitive_information(string
 commandArguments)
{
  return commandArguments.contains("-install-arguments-sensitive")
  || commandArguments.contains("-package-parameters-sensitive")
  || commandArguments.contains("apikey ")
  || commandArguments.contains("config ")
  || commandArguments.contains("push ")
  || commandArguments.contains("-p ")
  || commandArguments.contains("-p=")
  || commandArguments.contains("-password")
  || commandArguments.contains("-cp ")
  || commandArguments.contains("-cp=")
  || commandArguments.contains("-certpassword")
  || commandArguments.contains("-k ")
  || commandArguments.contains("-k=")
  || commandArguments.contains("-key ")
  || commandArguments.contains("-key=")
  || commandArguments.contains("-apikey")
  || commandArguments.contains("-api-key")
  || commandArguments.contains("-apikey")
  || commandArguments.contains("-api-key");
}

Chóipeáil agus ghreamaigh an ríomhchláraitheoir a scríobh an chuid seo den chód an dá líne dheireanacha agus rinne sé dearmad iad a chur in eagar. Mar gheall air seo, ní raibh úsáideoirí Chocolatey in ann an paraiméadar a chur i bhfeidhm aipicí cúpla bealach eile. Cosúil leis na paraiméadair thuas, is féidir liom na roghanna seo a leanas a thairiscint:

commandArguments.contains("-apikey=");
commandArguments.contains("-api-key=");

Tá seans ard ag earráidí cóip-ghreamú le feiceáil luath nó mall in aon tionscadal le méid mór cód foinse, agus tá anailís statach ar cheann de na huirlisí is fearr chun iad a chomhrac.

PS Agus mar i gcónaí, tá claonadh ag an earráid seo le feiceáil ag deireadh coinníoll il-líne :). Féach foilseachán "Éifeacht líne dheireanach".

Rabhadh N8

Rabhadh anailíseora: V3095 [CWE-476] Úsáideadh an réad 'installedPackage' sular fíoraíodh é i gcoinne null. Línte seiceála: 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)
  {
    ....
  }
  ....
}

Botún clasaiceach: réad ar dtús Pacáiste suiteáilte a úsáidtear agus ansin a sheiceáil le haghaidh nialasach. Insíonn an diagnóis seo dúinn faoi cheann amháin de dhá fhadhb sa chlár: ach an oiread Pacáiste suiteáilte riamh comhionann nialasach, a bhfuil amhras ann, agus ansin tá an seic iomarcach, nó d'fhéadfaimis earráid thromchúiseach a fháil sa chód - iarracht rochtain a fháil ar thagairt nialasach.

Conclúid

Mar sin tá céim bheag eile glactha againn - anois tá sé níos éasca agus níos áisiúla úsáid a bhaint as PVS-Studio. Ba mhaith liom a rá freisin gur bainisteoir pacáiste maith é Chocolatey le líon beag earráidí sa chód, rud a d'fhéadfadh a bheith níos lú fós nuair a bhíonn PVS-Studio á úsáid.

Tugaimid cuireadh скачать agus bain triail as PVS-Studio. Feabhsóidh úsáid rialta anailísí statach cáilíocht agus iontaofacht an chóid a fhorbraíonn d'fhoireann agus cabhróidh sé le go leor a chosc leochaileachtaí náid lá.

PS

Roimh fhoilsiú, chuireamar an t-alt chuig na forbróirí Chocolatey, agus fuair siad go maith é. Ní bhfuaireamar aon rud criticiúil, ach mar shampla, thaitin an fabht a fuaireamar a bhain leis an eochair “api-key” leo.

Tá PVS-Studio i Chocolatey anois: ag seiceáil Chocolatey ó faoi Azure DevOps

Más mian leat an t-alt seo a roinnt le lucht féachana Béarla, bain úsáid as an nasc aistriúcháin: Vladislav Stolyarov. Tá PVS-Studio i Seacláid Anois: Ag Seiceáil Chocolatey faoi Azure DevOps.

Foinse: will.com

Add a comment