PVS-Studio දැන් Chocolatey හි ඇත: Azure DevOps යටතේ චොකලට් පරීක්ෂා කිරීම

PVS-Studio දැන් Chocolatey හි ඇත: Azure DevOps යටතේ චොකලට් පරීක්ෂා කිරීම
PVS-Studio භාවිතය වඩාත් පහසු කිරීමට අපි දිගටම කටයුතු කරන්නෙමු. අපගේ විශ්ලේෂකය දැන් Windows සඳහා පැකේජ කළමනාකරු වන Chocolatey හි ඇත. මෙය PVS-Studio, විශේෂයෙන්ම, Cloud සේවාවන්හි යෙදවීමට පහසුකම් සපයනු ඇතැයි අපි විශ්වාස කරමු. දුර නොයන්න, අපි එකම චොකලට් වල මූල කේතය පරීක්ෂා කරමු. Azure DevOps CI පද්ධතියක් ලෙස ක්‍රියා කරයි.

වලාකුළු පද්ධති සමඟ ඒකාබද්ධ කිරීමේ මාතෘකාව පිළිබඳ අපගේ අනෙකුත් ලිපි ලැයිස්තුවක් මෙන්න:

Azure DevOps සමඟ ඒකාබද්ධ වීම පිළිබඳ පළමු ලිපිය කෙරෙහි අවධානය යොමු කරන ලෙස මම ඔබට උපදෙස් දෙමි, මන්ද මෙම අවස්ථාවේ දී අනුපිටපත් නොකිරීමට සමහර කරුණු මඟ හරිනු ලැබේ.

ඉතින්, මෙම ලිපියේ වීරයන්:

පීවීඑස්-ස්ටුඩියෝ C, C++, C# සහ Java හි ලියා ඇති වැඩසටහන් වල දෝෂ සහ විභව දුර්වලතා හඳුනා ගැනීමට නිර්මාණය කර ඇති ස්ථිතික කේත විශ්ලේෂණ මෙවලමකි. 64-bit Windows, Linux, සහ macOS පද්ධති මත ධාවනය වන අතර, 32-bit, 64-bit, සහ embedded ARM වේදිකා සඳහා නිර්මාණය කර ඇති කේතය විශ්ලේෂණය කළ හැක. ඔබේ ව්‍යාපෘති පරීක්ෂා කිරීමට ස්ථිතික කේත විශ්ලේෂණය උත්සාහ කරන පළමු අවස්ථාව මෙය නම්, ඔබ ගැන හුරුපුරුදු වන ලෙස අපි නිර්දේශ කරමු ලිපිය වඩාත් රසවත් PVS-Studio අනතුරු ඇඟවීම් ඉක්මනින් බැලීම සහ මෙම මෙවලමෙහි හැකියාවන් ඇගයීම ගැන.

Azure DevOps - සමස්ත සංවර්ධන ක්‍රියාවලිය ඒකාබද්ධව ආවරණය කරන වලාකුළු සේවා කට්ටලයක්. මෙම වේදිකාවට Azure Pipelines, Azure Boards, Azure Artifacts, Azure Repos, Azure Test Plans වැනි මෙවලම් ඇතුළත් වන අතර එමඟින් මෘදුකාංග නිර්මාණය කිරීමේ ක්‍රියාවලිය වේගවත් කිරීමට සහ එහි ගුණාත්මකභාවය වැඩි දියුණු කිරීමට ඔබට ඉඩ සලසයි.

චොකලට් වින්ඩෝස් සඳහා විවෘත මූලාශ්ර පැකේජ කළමනාකරු වේ. ව්‍යාපෘතියේ පරමාර්ථය වන්නේ වින්ඩෝස් මෙහෙයුම් පද්ධතිවල ස්ථාපනයේ සිට යාවත්කාලීන කිරීම සහ අස්ථාපනය කිරීම දක්වා සම්පූර්ණ මෘදුකාංග ජීවන චක්‍රය ස්වයංක්‍රීය කිරීමයි.

චොකලට් භාවිතය ගැන

Package Manager එක Install කරන හැටි මේකෙන් බලාගන්න පුළුවන් ලින්ක්. විශ්ලේෂකය ස්ථාපනය කිරීම සඳහා සම්පූර්ණ ලියකියවිලි ලබා ගත හැකිය ලින්ක් Chocolatey පැකේජ කළමනාකරු කොටස භාවිතයෙන් ස්ථාපනය බලන්න. මම එතැන් සිට කරුණු කිහිපයක් කෙටියෙන් නැවත කියන්නම්.

විශ්ලේෂකයේ නවතම අනුවාදය ස්ථාපනය කිරීමට විධානය:

choco install pvs-studio

PVS-Studio පැකේජයේ නිශ්චිත අනුවාදයක් ස්ථාපනය කිරීමට විධානය:

choco install pvs-studio --version=7.05.35617.2075

පෙරනිමියෙන්, විශ්ලේෂකයේ හරය, මූලික සංරචකය පමණක් ස්ථාපනය කර ඇත. අනෙකුත් සියලුම ධජ (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 ගබඩාවේ පිහිටා ඇති ව්‍යාපෘතියක් සමඟ ඔබේ ගිණුම සමමුහුර්ත කිරීම වැනි ගැටළු පිළිබඳව වෙනම අංශයක් ඇති බව මම ඔබට මතක් කරමි. ලිපියක්. අපගේ සැකසුම වහාම වින්‍යාස ගොනුවක් ලිවීමෙන් ආරම්භ වේ.

පළමුව, දියත් කිරීමේ ප්‍රේරකයක් සකසමු, අපි දියත් කරන්නේ වෙනස්කම් සඳහා පමණක් බව පෙන්වයි ස්වාමියා ශාඛාව:

trigger:
- master

මීළඟට අපි Virtual Machine එකක් තෝරාගත යුතුයි. දැනට එය Windows Server 2019 සහ Visual Studio 2019 සමඟ Microsoft සත්කාරක නියෝජිතයෙකු වනු ඇත:

pool:
  vmImage: 'windows-latest'

අපි වින්‍යාස ගොනුවේ ශරීරය වෙත යමු (බ්ලොක් පියවර) ඔබට අත්තනෝමතික මෘදුකාංග අථත්‍ය යන්ත්‍රයකට ස්ථාපනය කළ නොහැකි වුවද, මම ඩොකර් කන්ටේනරයක් එක් කළේ නැත. අපට Azure DevOps සඳහා දිගුවක් ලෙස Chocolatey එකතු කළ හැක. මෙය සිදු කිරීම සඳහා, අපි යමු ලින්ක්. ක්ලික් කරන්න එය නොමිලේ ලබා ගන්න. ඊළඟට, ඔබ දැනටමත් අවසර දී ඇත්නම්, සරලව ඔබගේ ගිණුම තෝරන්න, එසේ නොමැති නම්, අවසර දීමෙන් පසුව එකම දේ කරන්න.

PVS-Studio දැන් Chocolatey හි ඇත: Azure DevOps යටතේ චොකලට් පරීක්ෂා කිරීම

මෙහිදී අපි දිගුව එකතු කරන ස්ථානය තෝරාගෙන බොත්තම ක්ලික් කරන්න ස්ථාපනය.

PVS-Studio දැන් Chocolatey හි ඇත: Azure DevOps යටතේ චොකලට් පරීක්ෂා කිරීම

සාර්ථක ස්ථාපනයකින් පසු, ක්ලික් කරන්න සංවිධානය වෙත යන්න:

PVS-Studio දැන් Chocolatey හි ඇත: Azure DevOps යටතේ චොකලට් පරීක්ෂා කිරීම

ඔබට දැන් කවුළුව තුළ චොකලට් කාර්යය සඳහා අච්චුව දැකිය හැකිය කාර්යයන් වින්‍යාස ගොනුවක් සංස්කරණය කරන විට azure-pipelines.yml:

PVS-Studio දැන් Chocolatey හි ඇත: Azure DevOps යටතේ චොකලට් පරීක්ෂා කිරීම

Chocolatey මත ක්ලික් කර ක්ෂේත්‍ර ලැයිස්තුවක් බලන්න:

PVS-Studio දැන් Chocolatey හි ඇත: Azure DevOps යටතේ චොකලට් පරීක්ෂා කිරීම

මෙන්න අපි තෝරාගත යුතුයි ස්ථාපනය කරන්න කණ්ඩායම් සමඟ පිටියේ. තුල Nuspec ගොනු නාමය අවශ්ය පැකේජයේ නම සඳහන් කරන්න - pvs-studio. ඔබ අනුවාදය සඳහන් නොකරන්නේ නම්, නවතම එක ස්ථාපනය කරනු ඇත, එය අපට සම්පූර්ණයෙන්ම ගැලපේ. අපි බොත්තම ඔබන්න එකතු සහ අපි වින්‍යාස ගොනුවේ උත්පාදනය කරන ලද කාර්යය දකිනු ඇත.

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

ඊළඟට, අපි අපගේ ගොනුවේ ප්රධාන කොටස වෙත යමු:

- task: CmdLine@2
  inputs:
    script: 

දැන් අපි විශ්ලේෂක බලපත්‍රය සමඟ ගොනුවක් සෑදිය යුතුයි. මෙතන PVSNAME и PVSKEY - අපි සැකසුම් තුළ සඳහන් කරන අගයන් සහිත විචල්‍යවල නම්. ඔවුන් PVS-Studio පිවිසුම් සහ බලපත්‍ර යතුර ගබඩා කරනු ඇත. ඒවායේ අගයන් සැකසීමට, මෙනුව විවෘත කරන්න විචල්‍යයන්->නව විචල්‍යය. අපි variables හදමු PVSNAME පුරනය වීම සඳහා සහ PVSKEY විශ්ලේෂක යතුර සඳහා. කොටුව සලකුණු කිරීමට අමතක නොකරන්න මෙම අගය රහසිගතව තබා ගන්න සඳහා PVSKEY. විධාන කේතය:

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

ගබඩාවේ ඇති බැට් ගොනුව භාවිතයෙන් අපි ව්‍යාපෘතිය ගොඩනඟමු:

сall build.bat

විශ්ලේෂකයේ ප්‍රතිඵල සහිත ගොනු ගබඩා කෙරෙන ෆෝල්ඩරයක් නිර්මාණය කරමු:

сall mkdir PVSTestResults

අපි ව්යාපෘතිය විශ්ලේෂණය ආරම්භ කරමු:

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

PlogСonverter උපයෝගීතාව භාවිතයෙන් අපි අපගේ වාර්තාව 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()

සම්පූර්ණ වින්‍යාස ගොනුව මේ ආකාරයෙන් පෙනේ:

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

අපි ක්ලික් කරමු සුරකින්න->සුරකින්න-> ධාවනය කරන්න කාර්යය ක්රියාත්මක කිරීමට. කාර්ය පටිත්ත වෙත ගොස් වාර්තාව බාගත කරමු.

PVS-Studio දැන් Chocolatey හි ඇත: Azure DevOps යටතේ චොකලට් පරීක්ෂා කිරීම

Chocolatey ව්‍යාපෘතියේ C# කේතයේ පේළි 37615ක් පමණක් අඩංගු වේ. සොයාගත් වැරදි කිහිපයක් බලමු.

පරීක්ෂණ ප්රතිඵල

අනතුරු ඇඟවීම N1

විශ්ලේෂක අනතුරු ඇඟවීම: V3005 'සැපයුම්කරු' විචල්‍යය ඔහුටම පවරා ඇත. CrytpoHashProviderSpecs.cs 38

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

විශ්ලේෂකය තමන්ටම විචල්‍යයේ පැවරුමක් අනාවරණය කර ගත් අතර එය තේරුමක් නැත. බොහෝ දුරට, මෙම විචල්‍ය වලින් එකක් වෙනුවට වෙනත් එකක් තිබිය යුතුය. හොඳයි, නැතහොත් මෙය ටයිප් එකකි, අමතර පැවරුම සරලව ඉවත් කළ හැකිය.

අනතුරු ඇඟවීම N2

විශ්ලේෂක අනතුරු ඇඟවීම: V3093 [CWE-480] '&' ක්‍රියාකරු මෙහෙයුම් දෙකම ඇගයීමට ලක් කරයි. සමහරවිට ඒ වෙනුවට කෙටි-පරිපථ '&&' ක්‍රියාකරු භාවිතා කළ යුතුය. Platform.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;
  }
}

ක්රියාකරු වෙනස & ක්රියාකරුගෙන් && යනු ප්‍රකාශනයේ වම් පැත්ත නම් වේ බොරු, එවිට දකුණු පැත්ත තවමත් ගණනය කරනු ඇත, මෙම නඩුවේ අනවශ්ය ක්රම ඇමතුම් ඇඟවුම් කරයි system.directory_පවතියි.

සලකා බලන ලද කොටසෙහි, මෙය සුළු දෝෂයකි. ඔව්, & ක්රියාකරු වෙනුවට && ක්රියාකරු සමඟ මෙම තත්ත්වය ප්රශස්ත කළ හැක, නමුත් ප්රායෝගික දෘෂ්ටි කෝණයකින් මෙය කිසිවකට බලපාන්නේ නැත. කෙසේ වෙතත්, වෙනත් අවස්ථා වලදී, & සහ && අතර ව්‍යාකූලත්වය ප්‍රකාශනයේ දකුණු පැත්ත වැරදි/අවලංගු අගයන් සමඟ සලකන විට බරපතල ගැටළු ඇති කළ හැක. උදාහරණයක් ලෙස, අපගේ දෝෂ එකතුවේ, V3093 රෝග විනිශ්චය භාවිතයෙන් හඳුනාගෙන ඇත, මෙම නඩුව තිබේ:

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

දර්ශකය වුවද k වැරදියි, එය අරා මූලද්‍රව්‍යයකට ප්‍රවේශ වීමට භාවිතා කරනු ඇත. එහි ප්රතිඵලයක් වශයෙන්, ව්යතිරේකයක් දමනු ලැබේ IndexOutOfRangeException.

අනතුරු ඇඟවීම් N3, N4

විශ්ලේෂක අනතුරු ඇඟවීම: V3022 [CWE-571] 'shortPrompt' ප්‍රකාශනය සැමවිටම සත්‍ය වේ. InteractivePrompt.cs 101
විශ්ලේෂක අනතුරු ඇඟවීම: V3022 [CWE-571] 'shortPrompt' ප්‍රකාශනය සැමවිටම සත්‍ය වේ. 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
    ....
  }
  ....
}

මෙහිදී ත්‍රිත්ව ක්‍රියාකරුගේ ක්‍රියාකාරිත්වය පිටුපස ඇත්තේ අමුතු තර්කයකි. අපි සමීපව බලමු: මා අංක 1 සමඟ සලකුණු කළ කොන්දේසිය සපුරා ඇත්නම්, අපි සෑම විටම 2 වන කොන්දේසිය වෙත යමු. සැබෑ, එනම් පේළිය 3 ක්‍රියාත්මක වනු ඇත, කොන්දේසිය 1 අසත්‍ය බවට පත් වුවහොත්, අපි අංක 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)

විචල්‍යයේ සිට j ඉහත පේළි කිහිපයක් බිංදුවට ආරම්භ කර ඇත, ත්‍රිත්ව ක්‍රියාකරු විසින් අගය ආපසු ලබා දෙනු ඇත බොරු. මෙම තත්ත්වය නිසා, ලූපයේ සිරුර එක් වරක් පමණක් ක්රියාත්මක වනු ඇත. මෙම කේත කොටස ක්‍රමලේඛකයා අදහස් කළ පරිදි කිසිසේත් ක්‍රියා නොකරන බව මට පෙනේ.

අනතුරු ඇඟවීම 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 != 1සෑම විටම වනු ඇත සැබෑ. බොහෝ විට එවැනි අනතුරු ඇඟවීමක් කේතයේ තාර්කික දෝෂයක් පෙන්නුම් කරයි, සහ වෙනත් අවස්ථාවල දී එය හුදෙක් අතිරික්ත පරීක්ෂාව පෙන්නුම් කරයි.

අනතුරු ඇඟවීම N7

විශ්ලේෂක අනතුරු ඇඟවීම: V3001 '||' හි වමට සහ දකුණට 'commandArguments.contains("-apikey")' සමාන උප ප්‍රකාශන ඇත. ක්රියාකරු. ArgumentsUtility.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");
}

මෙම කේත කොටස ලියූ ක්‍රමලේඛකයා අවසාන පේළි දෙක පිටපත් කර ඇලවූ අතර ඒවා සංස්කරණය කිරීමට අමතක විය. මේ නිසා, Chocolatey භාවිතා කරන්නන්ට පරාමිතිය යෙදීමට නොහැකි විය apikey තවත් ක්රම කිහිපයක්. ඉහත පරාමිතීන්ට සමානව, මට පහත විකල්ප ඉදිරිපත් කළ හැකිය:

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

විශාල ප්‍රභව කේත ප්‍රමාණයක් සහිත ඕනෑම ව්‍යාපෘතියක ඉක්මනින් හෝ පසුව පිටපත් කිරීමේ දෝෂ දර්ශනය වීමට ඉහළ සම්භාවිතාවක් ඇති අතර ඒවාට එරෙහිව සටන් කිරීමට හොඳම මෙවලමක් වන්නේ ස්ථිතික විශ්ලේෂණයයි.

PS සහ සෑම විටම මෙන්, මෙම දෝෂය බහු-රේඛා තත්ත්වයක අවසානයේ දිස් වේ :). ප්‍රකාශනය බලන්න"අවසාන පේළියේ බලපෑම".

අනතුරු ඇඟවීම N8

විශ්ලේෂක අනතුරු ඇඟවීම: V3095 [CWE-476] 'ස්ථාපිත පැකේජ' වස්තුව ශුන්‍යයට එරෙහිව සත්‍යාපනය කිරීමට පෙර භාවිතා කරන ලදී. පිරික්සුම් රේඛා: 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)
  {
    ....
  }
  ....
}

සම්භාව්‍ය වැරැද්ද: වස්තුව පළමුව ස්ථාපිත පැකේජය භාවිතා කර පසුව පරීක්ෂා කරනු ලැබේ ශුන්ය. මෙම රෝග විනිශ්චය වැඩසටහනේ ඇති ගැටළු දෙකෙන් එකක් ගැන අපට කියයි: එක්කෝ ස්ථාපිත පැකේජය කිසිදා සමාන නොවේ ශුන්ය, එය සැක සහිත ය, පසුව චෙක්පත අතිරික්ත වේ, නැතහොත් අපට කේතයේ බරපතල දෝෂයක් ඇතිවිය හැකිය - ශුන්‍ය යොමුවකට ප්‍රවේශ වීමට උත්සාහයක්.

නිගමනය

එබැවින් අපි තවත් කුඩා පියවරක් ගෙන ඇත - දැන් PVS-Studio භාවිතා කිරීම වඩාත් පහසු සහ පහසු වී ඇත. PVS-Studio භාවිතා කරන විට ඊටත් වඩා අඩු විය හැකි කේතයේ කුඩා දෝෂ සංඛ්‍යාවක් සහිත Chocolatey හොඳ පැකේජ කළමණාකරුවෙකු බව මම පැවසීමට කැමැත්තෙමි.

අපි ඔබට ආරාධනා කරනවා скачать සහ PVS-Studio උත්සාහ කරන්න. ස්ථිතික විශ්ලේෂකයක් නිතිපතා භාවිතා කිරීම ඔබේ කණ්ඩායම සංවර්ධනය කරන කේතයේ ගුණාත්මකභාවය සහ විශ්වසනීයත්වය වැඩි දියුණු කරන අතර බොහෝ දේ වැළැක්වීමට උපකාරී වේ ශුන්‍ය දින අවදානම්.

ප්රාදේශීය සභා

ප්‍රකාශනය කිරීමට පෙර, අපි ලිපිය චොකලට් සංවර්ධකයින් වෙත යැවූ අතර ඔවුන්ට එය හොඳින් ලැබුණි. අපි විවේචනාත්මක කිසිවක් සොයා ගත්තේ නැත, නමුත් ඔවුන්, උදාහරණයක් ලෙස, "api-key" යතුර සම්බන්ධව අප සොයාගත් දෝෂයට කැමති විය.

PVS-Studio දැන් Chocolatey හි ඇත: Azure DevOps යටතේ චොකලට් පරීක්ෂා කිරීම

ඔබට මෙම ලිපිය ඉංග්‍රීසි කතා කරන ප්‍රේක්ෂකයින් සමඟ බෙදා ගැනීමට අවශ්‍ය නම්, කරුණාකර පරිවර්තන සබැඳිය භාවිතා කරන්න: Vladislav Stolyarov. PVS-Studio දැන් Chocolatey හි ඇත: Azure DevOps යටතේ චොකලට් පරීක්ෂා කිරීම.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න