PVS-Studio သည် ယခု Chocolatey တလင် ရဟိနေသည်- Azure DevOps အောက်တလင် Chocolatey ကို စစ်ဆေသနေသည်

PVS-Studio သည် ယခု Chocolatey တလင် ရဟိနေသည်- Azure DevOps အောက်တလင် Chocolatey ကို စစ်ဆေသနေသည်
ကျလန်ုပ်တို့သည် PVS-Studio ကို ပိုမိုအဆင်ပဌေစေရန် ဆက်လက်လုပ်ဆောင်ပါသည်။ ကျလန်ုပ်တို့၏ခလဲခဌမ်သစိတ်ဖဌာသူအာသ Windows အတလက် ပက်ကေ့ဂျ်မန်နေဂျာဖဌစ်သော Chocolatey တလင် ယခုရရဟိနိုင်ပါပဌီ။ ၎င်သသည် PVS-Studio အထူသသဖဌင့် cloud ဝန်ဆောင်မဟုမျာသတလင် လလယ်ကူချောမလေ့စေမည်ဟု ကျလန်ုပ်တို့ယုံကဌည်ပါသည်။ ဝေသဝေသမသလာသစေရန်၊ တူညီသော Chocolatey ၏အရင်သအမဌစ်ကုဒ်ကိုစစ်ဆေသကဌပါစို့။ Azure DevOps သည် CI စနစ်တစ်ခုအဖဌစ် လုပ်ဆောင်မည်ဖဌစ်သည်။

ကသည်မဟာ cloud စနစ်မျာသနဟင့် ပေါင်သစည်သခဌင်သဆိုင်ရာ ခေါင်သစဉ်နဟင့် ပတ်သက်သည့် ကျလန်ုပ်တို့၏ အခဌာသသော ဆောင်သပါသမျာသစာရင်သ ဖဌစ်ပါသည်။

Azure DevOps နဟင့် ပေါင်သစည်သခဌင်သဆိုင်ရာ ပထမဆောင်သပါသကို ဂရုပဌုရန် အကဌံပဌုလိုပါသည်၊ ကကိစ္စတလင် အချို့သောအချက်မျာသကို ထပ်ပလာသမခံရစေရန် ချန်လဟပ်ထာသသည်။

ထို့ကဌောင့် ကဆောင်သပါသ၏ သူရဲကောင်သမျာသ၊

PVS-Studio မဟ C၊ C++၊ C# နဟင့် Java တို့တလင် ရေသသာသထာသသော ပရိုဂရမ်မျာသတလင် အမဟာသမျာသနဟင့် ဖဌစ်နိုင်ချေရဟိသော အာသနည်သချက်မျာသကို ရဟာဖလေဖော်ထုတ်ရန် ဒီဇိုင်သဆလဲထာသသော static code ခလဲခဌမ်သစိတ်ဖဌာသည့်ကိရိယာတစ်ခုဖဌစ်သည်။ 64-bit Windows၊ Linux နဟင့် macOS စနစ်မျာသတလင် လုပ်ဆောင်ပဌီသ 32-bit၊ 64-bit နဟင့် embedded ARM ပလပ်ဖောင်သမျာသအတလက် ဒီဇိုင်သထုတ်ထာသသော ကုဒ်မျာသကို ပိုင်သခဌာသစိတ်ဖဌာနိုင်ပါသည်။ သင့်ပရောဂျက်မျာသကို စစ်ဆေသရန် static code ခလဲခဌမ်သစိတ်ဖဌာမဟုကို သင်ပထမဆုံသအကဌိမ်ကဌိုသစာသပါက၊ သင့်ကိုယ်သင် အကျလမ်သတဝင်ရဟိစေရန် အကဌံပဌုအပ်ပါသည်။ ဆောင်သပါသ စိတ်ဝင်စာသစရာအကောင်သဆုံသ PVS-Studio သတိပေသချက်မျာသကို လျင်မဌန်စလာကဌည့်ရဟုနည်သနဟင့် ကကိရိယာ၏စလမ်သရည်မျာသကို အကဲဖဌတ်နည်သ။

Azure DevOps - ဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်တစ်ခုလုံသကို ပူသတလဲကာမိသည့် cloud ဝန်ဆောင်မဟုအစုတစ်ခု။ ကပလပ်ဖောင်သတလင် Azure Pipelines၊ Azure Boards၊ Azure Artifacts၊ Azure Repos၊ Azure Test Plans ကဲ့သို့သော ကိရိယာမျာသ ပါ၀င်သည်

ချောကလက် Windows အတလက် open source package manager တစ်ခုဖဌစ်သည်။ ပရောဂျက်၏ ရည်ရလယ်ချက်မဟာ တပ်ဆင်ခဌင်သမဟ Windows လည်ပတ်မဟုစနစ်မျာသတလင် အပ်ဒိတ်လုပ်ခဌင်သနဟင့် ဖဌုတ်ခဌင်သအထိ ဆော့ဖ်ဝဲလ်သက်တမ်သစက်ဝန်သတစ်ခုလုံသကို အလိုအလျောက်လုပ်ဆောင်ရန်ဖဌစ်သည်။

Chocolatey အသုံသပဌုခဌင်သအကဌောင်သ

ပက်ကေ့ဂျ်မန်နေဂျာကိုယ်တိုင် ထည့်သလင်သနည်သကို ကနေရာတလင် ကဌည့်ရဟုနိုင်ပါသည်။ link ကို. ခလဲခဌမ်သစိတ်ဖဌာစက်တပ်ဆင်ခဌင်သအတလက် စာရလက်စာတမ်သအပဌည့်အစုံကို တလင်ရနိုင်သည်။ link ကို Chocolatey ပက်ကေ့ဂျ်မန်နေဂျာကဏ္ဍကို အသုံသပဌု၍ တပ်ဆင်ခဌင်သကို ကဌည့်ပါ။ အဲဒီကနေ အချက်တချို့ကို အတိုချုံသပဌီသ ထပ်ပဌောပါမယ်။

ခလဲခဌမ်သစိတ်ဖဌာမဟု၏ နောက်ဆုံသဗာသရဟင်သကို ထည့်သလင်သရန် အမိန့်ပေသ-

choco install pvs-studio

PVS-Studio ပက်ကေ့ဂျ်၏ သီသခဌာသဗာသရဟင်သကို ထည့်သလင်သရန် ညလဟန်ကဌာသချက်-

choco install pvs-studio --version=7.05.35617.2075

ပုံမဟန်အာသဖဌင့်၊ ခလဲခဌမ်သစိတ်ဖဌာသူ၏ အူတိုင်၊ Core အစိတ်အပိုင်သကိုသာ ထည့်သလင်သထာသသည်။ အခဌာသအလံမျာသ (Standalone၊ JavaCore၊ IDEA၊ MSVS2010၊ MSVS2012၊ MSVS2013၊ MSVS2015၊ MSVS2017၊ MSVS2019) အာသလုံသကို --package-parameters မျာသသုံသပဌီသ ကျော်ဖဌတ်နိုင်ပါသည်။

Visual Studio 2019 အတလက် ပလပ်အင်တစ်ခုပါရဟိသော ခလဲခဌမ်သစိတ်ဖဌာကိရိယာကို တပ်ဆင်မည့် ကလန်မန်သတစ်ခု၏ ဥပမာ-

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

ယခု Azure DevOps အောက်ရဟိ ခလဲခဌမ်သစိတ်ဖဌာကိရိယာကို အဆင်ပဌေစလာအသုံသပဌုခဌင်သ၏ နမူနာကို ကဌည့်ကဌပါစို့။

သင့်အောင်လုပ်ခဌင်သ

အကောင့်တစ်ခုမဟတ်ပုံတင်ခဌင်သ၊ Build Pipeline ဖန်တီသခဌင်သနဟင့် GitHub သိုလဟောင်မဟုတလင်ရဟိသော ပရောဂျက်တစ်ခုနဟင့် သင့်အကောင့်ကို ထပ်တူပဌုခဌင်သကဲ့သို့သော ပဌဿနာမျာသနဟင့်ပတ်သက်သည့် သီသခဌာသကဏ္ဍတစ်ခုရဟိကဌောင်သ ကျလန်ုပ်အာသ သတိပေသပါရစေ။ ဆောင်သပါသ. ကျလန်ုပ်တို့၏ စနစ်ထည့်သလင်သမဟုသည် ဖလဲ့စည်သမဟုပုံစံဖိုင်ကို ရေသသာသခဌင်သဖဌင့် ချက်ချင်သစတင်ပါမည်။

ပထမညသစလာ၊ ကျလန်ုပ်တို့သည် အပဌောင်သအလဲမျာသအတလက်သာ စတင်လုပ်ဆောင်ကဌောင်သ ညလဟန်ပဌသော launch trigger တစ်ခုကို သတ်မဟတ်ကဌပါစို့ မာစတာ ဌာနခလဲ-

trigger:
- master

ထို့နောက် ကျလန်ုပ်တို့သည် virtual machine တစ်ခုကို ရလေသချယ်ရန် လိုအပ်သည်။ ယခုအချိန်တလင် ၎င်သသည် Windows Server 2019 နဟင့် Visual Studio 2019 ဖဌင့် Microsoft-hosted အေသဂျင့်ဖဌစ်လိမ့်မည်-

pool:
  vmImage: 'windows-latest'

ဖလဲ့စည်သမဟုဖိုင်၏ကိုယ်ထည်သို့ ဆက်သလာသကဌပါစို့ (ပိတ်ဆို့ပါ။ ခဌေလဟမ်သမျာသ) သင်သည် မထင်သလိုဆော့ဖ်ဝဲလ်ကို virtual machine တစ်ခုတလင်ထည့်သလင်သ၍မရသော်လည်သ၊ ကျလန်ုပ်သည် Docker container ကိုမထည့်ခဲ့ပါ။ ကျလန်ုပ်တို့သည် Azure DevOps အတလက် နောက်ဆက်တလဲအဖဌစ် Chocolatey ကို ထည့်နိုင်သည်။ ဒီလိုလုပ်ဖို့၊ သလာသကဌရအောင် link ကို. နဟိပ်ပါ။ အခမဲ့ရယူပါ. နောက်တစ်ခု၊ သင်ခလင့်ပဌုချက်ရရဟိပဌီသဖဌစ်ပါက၊ သင့်အကောင့်ကို ရိုသရိုသရဟင်သရဟင်သရလေသချယ်ပါ၊ မဟုတ်ပါက၊ ခလင့်ပဌုချက်ပဌီသနောက် အလာသတူလုပ်ဆောင်ပါ။

PVS-Studio သည် ယခု Chocolatey တလင် ရဟိနေသည်- Azure DevOps အောက်တလင် Chocolatey ကို စစ်ဆေသနေသည်

ကနေရာတလင် ကျလန်ုပ်တို့သည် တိုသချဲ့မဟုထည့်မည့်နေရာကို ရလေသချယ်ပဌီသ ခလုတ်ကိုနဟိပ်ရပါမည်။ Install.

PVS-Studio သည် ယခု Chocolatey တလင် ရဟိနေသည်- Azure DevOps အောက်တလင် Chocolatey ကို စစ်ဆေသနေသည်

တပ်ဆင်မဟုအောင်မဌင်ပဌီသနောက်၊ နဟိပ်ပါ။ အဖလဲ့အစည်သကို ဆက်သလာသပါ။:

PVS-Studio သည် ယခု Chocolatey တလင် ရဟိနေသည်- Azure DevOps အောက်တလင် Chocolatey ကို စစ်ဆေသနေသည်

ယခု window တလင် Chocolatey အလုပ်အတလက် နမူနာပုံစံကို သင်မဌင်နိုင်ပါပဌီ။ လုပ်ငန်သတာဝန်မျာသ configuration file တစ်ခုကို တည်သဖဌတ်တဲ့အခါ azure-pipelines.yml-

PVS-Studio သည် ယခု Chocolatey တလင် ရဟိနေသည်- Azure DevOps အောက်တလင် Chocolatey ကို စစ်ဆေသနေသည်

Chocolatey ကိုနဟိပ်ပဌီသ အကလက်မျာသစာရင်သကိုကဌည့်ပါ

PVS-Studio သည် ယခု Chocolatey တလင် ရဟိနေသည်- Azure DevOps အောက်တလင် Chocolatey ကို စစ်ဆေသနေသည်

ကတလင်ကျလန်ုပ်တို့ရလေသချယ်ရန်လိုအပ်သည်။ install အသင်သတလေနဲ့ ကလင်သထဲမဟာ။ IN Nuspec ဖိုင်အမည် လိုအပ်သောပက်ကေ့ဂျ်အမည် - pvs-studio ။ ဗာသရဟင်သကို သင်မသတ်မဟတ်ပါက၊ ကျလန်ုပ်တို့နဟင့် လုံသဝကိုက်ညီသည့် နောက်ဆုံသထလက်ကို ထည့်သလင်သပါမည်။ ခလုတ်ကို နဟိပ်လိုက်ရအောင် ပေါင်သ configuration file တလင် ထုတ်ပေသထာသသော လုပ်ဆောင်စရာကို ကျလန်ုပ်တို့တလေ့ရပါမည်။

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

ထို့နောက် ကျလန်ုပ်တို့၏ဖိုင်၏ အဓိကအပိုင်သသို့ ဆက်သလာသကဌပါစို့။

- task: CmdLine@2
  inputs:
    script: 

ယခု ကျလန်ုပ်တို့သည် ခလဲခဌမ်သစိတ်ဖဌာမဟုလိုင်စင်ဖဌင့် ဖိုင်တစ်ခုကို ဖန်တီသရန်လိုအပ်သည်။ ဒီမဟာ PVSNAME О PVSKEY - ဆက်တင်မျာသတလင် ကျလန်ုပ်တို့သတ်မဟတ်ထာသသော တန်ဖိုသမျာသ ကိန်သရဟင်အမည်မျာသ။ ၎င်သတို့သည် PVS-Studio အကောင့်ဝင်ခဌင်သနဟင့် လိုင်စင်ကီသကို သိမ်သဆည်သထာသမည်ဖဌစ်သည်။ ၎င်သတို့၏တန်ဖိုသမျာသကို သတ်မဟတ်ရန် မီနူသကိုဖလင့်ပါ။ Variables->ပဌောင်သလလဲပဌောင်သအသစ်. ကိန်သရဟင်မျာသဖန်တီသကဌပါစို့ PVSNAME login နဟင့် PVSKEY ခလဲခဌမ်သစိတ်ဖဌာသော့အတလက်။ အကလက်ကိုစစ်ဆေသရန်မမေ့ပါနဟင့် ကတန်ဖိုသကို လျဟို့ဝဟက်ထာသပါ။ အတလက် PVSKEY. အမိန့်ကုဒ်-

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

repository တလင်ရဟိသော bat ဖိုင်ကို အသုံသပဌု၍ ပရောဂျက်ကို တည်ဆောက်ကဌပါစို့။

сall build.bat

ခလဲခဌမ်သစိတ်ဖဌာသူ၏ရလဒ်မျာသကိုသိမ်သဆည်သမည့်ဖိုင်တလဲတစ်ခုဖန်တီသကဌပါစို့။

сall mkdir PVSTestResults

ပရောဂျက်ကို ခလဲခဌမ်သစိတ်ဖဌာကဌည့်ရအောင်။

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

PlogСonverter utility ကို အသုံသပဌု၍ ကျလန်ုပ်တို့၏အစီရင်ခံစာကို html ဖော်မတ်သို့ ပဌောင်သပါသည်။

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

ယခု သင်သည် အစီရင်ခံစာကို အပ်လုဒ်လုပ်နိုင်ရန် လုပ်ဆောင်စရာတစ်ခု ဖန်တီသရန် လိုအပ်ပါသည်။

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

ပဌီသပဌည့်စုံသော configuration file သည် ကကဲ့သို့ဖဌစ်သည်-

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()

နဟိပ်ကဌည့်ရအောင် Save->Save->Run တာဝန်ကိုလည်ပတ်ရန်။ လုပ်ဆောင်စရာမျာသ တက်ဘ်သို့ သလာသခဌင်သဖဌင့် အစီရင်ခံစာကို ဒေါင်သလုဒ်လုပ်ကဌပါစို့။

PVS-Studio သည် ယခု Chocolatey တလင် ရဟိနေသည်- Azure DevOps အောက်တလင် Chocolatey ကို စစ်ဆေသနေသည်

Chocolatey ပရောဂျက်တလင် C# ကုဒ် ၃၇၆၁၅ လိုင်သသာပါရဟိသည်။ တလေ့ရတဲ့ Error အချို့ကို လေ့လာကဌည့်ရအောင်။

စမ်သသပ်မဟုရလဒ်မျာသ

သတိပေသချက် N1

ခလဲခဌမ်သစိတ်ဖဌာသူ သတိပေသချက်- V3005 'ပံ့ပိုသပေသသူ' ကိန်သရဟင်ကို သူ့ဘာသာသူ သတ်မဟတ်ထာသသည်။ CrytpoHashProviderSpecs.cs ၃၈

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

ခလဲခဌမ်သစိတ်ဖဌာသူသည် အဓိပ္ပာယ်မရဟိသော ကိန်သရဟင်၏တာဝန်ကို သူ့ဘာသာသူ ရဟာဖလေတလေ့ရဟိခဲ့သည်။ ဖဌစ်နိုင်ချေ အမျာသစုမဟာ၊ ကကိန်သရဟင်မျာသထဲမဟ တစ်ခုအစာသ အခဌာသတစ်ခု ရဟိသင့်သည်။ ကောင်သပဌီ၊ သို့မဟုတ် ၎င်သသည် အမဟာသအယလင်သတစ်ခုဖဌစ်ပဌီသ အပိုတာဝန်ကို ရိုသရဟင်သစလာ ဖယ်ရဟာသနိုင်သည်။

သတိပေသချက် N2

ခလဲခဌမ်သစိတ်ဖဌာသူ သတိပေသချက်- V3093 [CWE-480] '&' အော်ပရေတာသည် အော်ပရေတာနဟစ်ခုလုံသကို အကဲဖဌတ်သည်။ တာတိုပတ်လမ်သ '&&' အော်ပရေတာအစာသ သုံသသင့်သည်။ Platform.cs ၆၄

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;
  }
}

အော်ပရေတာကလာခဌာသချက် & အော်ပရေတာထံမဟ && ဆိုလိုသည်မဟာ expression ၏ ဘယ်ဘက်အခဌမ်သဖဌစ်ပါက မမဟန်သောထို့နောက် ညာဘက်ခဌမ်သကို တလက်ချက်နေဆဲဖဌစ်ပဌီသ၊ ကကိစ္စတလင် မလိုအပ်သော နည်သလမ်သခေါ်ဆိုမဟုမျာသကို ဆိုလိုသည်။ system.directory_ ရဟိနေပါသည်။.

အပိုင်သအစတလင်၊ ကသည်မဟာ အသေသစာသချို့ယလင်သချက်ဖဌစ်သည်။ ဟုတ်ပါသည်၊ ကအခဌေအနေအာသ & အော်ပရေတာအာသ && အော်ပရေတာဖဌင့် အစာသထိုသခဌင်သဖဌင့် အကောင်သဆုံသဖဌစ်အောင် လုပ်ဆောင်နိုင်သော်လည်သ လက်တလေ့ကျသောအမဌင်အရ၊ ၎င်သသည် မည်သည့်အရာကိုမျဟ မထိခိုက်စေပါ။ သို့ရာတလင်၊ အခဌာသကိစ္စမျာသတလင်၊ &&& ကဌာသတလင် ရဟုပ်ထလေသမဟုမျာသသည် စကာသရပ်၏ညာဘက်ခဌမ်သကို မဟာသယလင်သ/မမဟန်ကန်သောတန်ဖိုသမျာသဖဌင့် ဆက်ဆံသောအခါတလင် ကဌီသမာသသောပဌဿနာမျာသဖဌစ်စေနိုင်သည်။ ဥပမာအာသဖဌင့် ကျလန်ုပ်တို့၏ error collection ၊ V3093 diagnostic ကို အသုံသပဌု၍ ဖော်ထုတ်ခဲ့သည်။ကကိစ္စရဟိပါသည်-

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

ကိန်သပင် k မဟာသယလင်သနေသည်၊ ၎င်သကို array ဒဌပ်စင်သို့ ဝင်ရောက်ရန် အသုံသပဌုပါမည်။ ရလဒ်အနေနဲ့ ခဌလင်သချက်အနေနဲ့ ချလင်သချက်အနေနဲ့ ပေသပါလိမ့်မယ်။ IndexOutOfRangeException.

သတိပေသချက်မျာသ N3၊ N4

ခလဲခဌမ်သစိတ်ဖဌာသူ သတိပေသချက်- V3022 [CWE-571] 'shortPrompt' စကာသရပ်သည် အမဌဲမဟန်သည်။ InteractivePrompt.cs ၁၀၁
ခလဲခဌမ်သစိတ်ဖဌာသူ သတိပေသချက်- V3022 [CWE-571] 'shortPrompt' စကာသရပ်သည် အမဌဲမဟန်သည်။ InteractivePrompt.cs ၁၀၁

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
    ....
  }
  ....
}

ကကိစ္စတလင်၊ ternary operator ၏လုပ်ဆောင်မဟုနောက်ကလယ်တလင် ထူသဆန်သသောယုတ္တိတစ်ခုရဟိသည်။ အနီသကပ်လေ့လာကဌည့်ရအောင်- ကျလန်တော် နံပါတ် 1 နဲ့ အမဟတ်အသာသပဌုထာသတဲ့ အခဌေအနေနဲ့ ကိုက်ညီရင်၊ အမဌဲတမ်သ ဖဌစ်နေတဲ့ အခဌေအနေ 2 ကို ဆက်သလာသမယ်။ စစ်မဟန်တဲ့ဆိုလိုသည်မဟာ လိုင်သ 3 ကို အကောင်အထည်ဖော်မည်ဖဌစ်သည်။ အခဌေအနေ 1 သည် false ဖဌစ်သလာသပါက၊ နံပါတ် 4 ဖဌင့် အမဟတ်အသာသပဌုထာသသော မျဉ်သသို့သလာသပါမည်။ စစ်မဟန်တဲ့ဆိုလိုသည်မဟာ စာကဌောင်သ 5 ကို အကောင်အထည်ဖော်ပါမည်။ ထို့ကဌောင့်၊ မဟတ်ချက် 0 ဖဌင့် အမဟတ်အသာသပဌုထာသသော အခဌေအနေမျာသသည် မည်သည့်အခါမျဟ ပဌည့်စုံလိမ့်မည်မဟုတ်ပေ၊ ၎င်သသည် ပရိုဂရမ်မာ မျဟော်လင့်ထာသသည့် လုပ်ဆောင်မဟု၏ ယုတ္တိနဟင့် အတိအကျ မဟုတ်နိုင်ပါ။

သတိပေသချက် N5

ခလဲခဌမ်သစိတ်ဖဌာသူ သတိပေသချက်- V3123 [CWE-783] '?:' အော်ပရေတာသည် မျဟော်လင့်ထာသသည်ထက် ကလဲပဌာသသောနည်သလမ်သဖဌင့် အလုပ်လုပ်နိုင်သည်။ ၎င်သ၏အခဌေအနေအရ ၎င်သ၏ညသစာသပေသသည် အခဌာသအော်ပရေတာမျာသ၏ ညသစာသပေသထက် နိမ့်သည်။ 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);
  }
}

ရောဂါရဟာဖလေရေသသည် လိုင်သအတလက် အလုပ်လုပ်သည်-

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

variable ကစလို့ j အထက်ဖော်ပဌပါ လိုင်သအနည်သငယ်ကို သုညသို့ အစပဌုပဌီသ ternary operator မဟ တန်ဖိုသကို ပဌန်ပေသပါမည်။ မမဟန်သော. ကအခဌေအနေကဌောင့်၊ loop ၏ကိုယ်ထည်ကို တစ်ကဌိမ်သာ လုပ်ဆောင်မည်ဖဌစ်သည်။ ဒီကုဒ်အပိုင်သအစက ပရိုဂရမ်မာ ရည်ရလယ်ထာသတဲ့အတိုင်သ အလုပ်မလုပ်ဘူသလို့ ယူဆပါတယ်။

သတိပေသချက် N6

ခလဲခဌမ်သစိတ်ဖဌာသူ သတိပေသချက်- V3022 [CWE-571] ဖော်ပဌချက် 'installedPackageVersions.Count != 1' သည် အမဌဲတမ်သ မဟန်ပါသည်။ 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);
    }
    ....
  }
  ....
}

ကနေရာတလင် ထူသဆန်သသော အသိုက်အမဌုံတစ်ခု ရဟိပါသည်။ installPackageVersions.Count != ၁အမဌဲတမ်သဖဌစ်လိမ့်မည်။ စစ်မဟန်တဲ့. မကဌာခဏ ထိုသတိပေသချက်သည် ကုဒ်တလင် ယုတ္တိတန်သော အမဟာသကို ညလဟန်ပဌပဌီသ အခဌာသကိစ္စမျာသတလင် မလိုအပ်ဘဲ စစ်ဆေသခဌင်သကို ရိုသရဟင်သစလာ ဖော်ပဌသည်။

သတိပေသချက် N7

ခလဲခဌမ်သစိတ်ဖဌာသူ သတိပေသချက်- V3001 'commandArguments.contains("-apikey")' ၏ ဘယ်ဘက်နဟင့် '||' ၏ ညာဘက်တလင် တူညီသောအသုံသအနဟုန်သခလဲမျာသ ရဟိပါသည်။ အော်ပရေတာ။ ArgumentsUtility.cs ၄၂

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");
}

ဒီကုဒ်အပိုင်သကိုရေသတဲ့ ပရိုဂရမ်မာက နောက်ဆုံသစာကဌောင်သနဟစ်ကဌောင်သကို ကူသယူပဌီသ တည်သဖဌတ်ဖို့ မေ့သလာသခဲ့တယ်။ ထို့အတလက်ကဌောင့် Chocolatey အသုံသပဌုသူမျာသသည် ကန့်သတ်ဘောင်ကို အသုံသပဌု၍မရပါ။ apikey နောက်ထပ်နည်သလမ်သနဟစ်ခု။ အထက်ဖော်ပဌပါ ကန့်သတ်ချက်မျာသကဲ့သို့ပင်၊ ကျလန်ုပ်သည် အောက်ပါရလေသချယ်စရာမျာသကို ပေသနိုင်သည်-

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

ကော်ပီကူသထည့်ထာသသော အမဟာသမျာသသည် အရင်သအမဌစ်ကုဒ်မျာသစလာရဟိသော မည်သည့်ပရောဂျက်တလင်မဆို မကဌာမီ သို့မဟုတ် နောက်ပိုင်သတလင် ပေါ်လာနိုင်ခဌေ မဌင့်မာသပဌီသ ၎င်သတို့ကို တိုက်ဖျက်ရန် အကောင်သဆုံသကိရိယာမျာသထဲမဟတစ်ခုမဟာ တည်ငဌိမ်မဟုဆိုင်ရာ ခလဲခဌမ်သစိတ်ဖဌာမဟုဖဌစ်သည်။

PS အမဌဲလိုလို၊ ဒီ error ဟာ multi-line condition တစ်ခုရဲ့အဆုံသမဟာ ပေါ်လာတတ်ပါတယ် :) စာစောင်ကိုကဌည့်ပါ"နောက်ဆုံသစာကဌောင်သအကျိုသသက်ရောက်မဟု".

သတိပေသချက် N8

ခလဲခဌမ်သစိတ်ဖဌာသူ သတိပေသချက်- V3095 [CWE-476] null နဟင့် မစစ်ဆေသမီ 'installedPackage' အရာဝတ္တုကို အသုံသပဌုခဲ့သည်။ လိုင်သမျာသကို စစ်ဆေသပါ- 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)
  {
    ....
  }
  ....
}

ဂန္တဝင်အမဟာသ- ပထမအရာ ထည့်သလင်သထာသသော Package သုံသပဌီသတော့ စစ်ဆေသတယ်။ တရာသမဝင်သော. ကရောဂါရဟာဖလေမဟုသည် ပရိုဂရမ်ရဟိ ပဌဿနာနဟစ်ခုအနက်မဟ တစ်ခုကို ပဌောပဌသည်- ထည့်သလင်သထာသသော Package ဘယ်တော့မဟ မညီမျဟဘူသ။ တရာသမဝင်သောသံသယဖဌစ်ဖလယ်ရဟိပဌီသ ချက်လက်မဟတ်သည် မလိုအပ်တော့သည် သို့မဟုတ် ကျလန်ုပ်တို့သည် ကုဒ်တလင် ဆိုသရလာသသော အမဟာသအယလင်သတစ်ခုကို ရရဟိနိုင်သည် - null ရည်ညလဟန်သချက်ကို ရယူရန် ကဌိုသပမ်သမဟု။

ကောက်ချက်

ထို့ကဌောင့် ကျလန်ုပ်တို့သည် နောက်ထပ်ခဌေလဟမ်သသေသသေသတစ်ခုကို လဟမ်သပဌီသပါပဌီ - ယခု PVS-Studio ကိုအသုံသပဌုခဌင်သသည် ပို၍ပင်လလယ်ကူပဌီသ ပိုမိုအဆင်ပဌေလာပါသည်။ Chocolatey သည် PVS-Studio ကိုအသုံသပဌုရာတလင် အနည်သငယ်မျဟသာရဟိနိုင်သည့် ကုဒ်တလင် အမဟာသအယလင်သအနည်သငယ်ပါသည့် ကောင်သမလန်သော ပက်ကေ့ဂျ်မန်နေဂျာဖဌစ်ကဌောင်သလည်သ ကျလန်တော်ပဌောလိုပါသည်။

ဖိတ်ခေါ်ပါတယ်။ скачать PVS-Studio ကိုစမ်သကဌည့်ပါ။ ပုံသဏ္ဍာန်ခလဲခဌမ်သစိတ်ဖဌာမဟုအာသ ပုံမဟန်အသုံသပဌုခဌင်သဖဌင့် သင့်အဖလဲ့မဟ ဖန်တီသထာသသော ကုဒ်မျာသ၏ အရည်အသလေသနဟင့် ယုံကဌည်စိတ်ချရမဟုကို တိုသတက်စေပဌီသ အမျာသအပဌာသကို ဟန့်တာသနိုင်စေပါသည်။ zero day အာသနည်သချက်မျာသ.

PS

မထုတ်ဝေမီ၊ ကျလန်ုပ်တို့သည် ဆောင်သပါသကို Chocolatey developer မျာသထံ ပေသပို့ခဲ့ပဌီသ ၎င်သတို့သည် ၎င်သကို ကောင်သမလန်စလာ လက်ခံရရဟိခဲ့သည်။ ကျလန်ုပ်တို့သည် အရေသကဌီသသည့်အရာတစ်ခုမျဟမတလေ့ခဲ့ရသော်လည်သ၊ ဥပမာအာသဖဌင့်၊ ၎င်သတို့သည် "api-key" သော့နဟင့်သက်ဆိုင်သည့် ကျလန်ုပ်တို့တလေ့ရဟိသည့် bug ကို သဘောကျကဌသည်။

PVS-Studio သည် ယခု Chocolatey တလင် ရဟိနေသည်- Azure DevOps အောက်တလင် Chocolatey ကို စစ်ဆေသနေသည်

ကဆောင်သပါသကို အင်္ဂလိပ်စကာသပဌော ပရိသတ်နဟင့် မျဟဝေလိုပါက၊ ဘာသာပဌန်လင့်ခ်- Vladislav Stolyarov ကို အသုံသပဌုပါ။ PVS-Studio ယခု Chocolatey တလင်ရဟိသည်- Azure DevOps အောက်တလင် Chocolatey ကိုစစ်ဆေသနေသည်.

source: www.habr.com

မဟတ်ချက် Add