PVS-Studio اب Chocolatey میں ہے: Azure DevOps کے تحت سے Chocolatey کو چیک کر رہا ہے

PVS-Studio اب Chocolatey میں ہے: Azure DevOps کے تحت سے Chocolatey کو چیک کر رہا ہے
ہم PVS-Studio کے استعمال کو مزید آسان بناتے رہتے ہیں۔ ہمارا تجزیہ کار اب Chocolatey میں دستیاب ہے، جو Windows کے لیے ایک پیکیج مینیجر ہے۔ ہمیں یقین ہے کہ اس سے PVS-Studio کی تعیناتی، خاص طور پر، کلاؤڈ سروسز میں سہولت ہوگی۔ زیادہ دور نہ جانے کے لیے، آئیے اسی چاکلیٹی کا سورس کوڈ چیک کرتے ہیں۔ Azure DevOps ایک CI سسٹم کے طور پر کام کرے گا۔

یہاں کلاؤڈ سسٹم کے ساتھ انضمام کے موضوع پر ہمارے دوسرے مضامین کی فہرست ہے:

میں آپ کو مشورہ دیتا ہوں کہ Azure DevOps کے ساتھ انضمام کے بارے میں پہلے مضمون پر توجہ دیں، کیونکہ اس معاملے میں کچھ نکات کو چھوڑ دیا گیا ہے تاکہ نقل نہ ہو۔

تو، اس مضمون کے ہیرو:

PVS- اسٹوڈیو ایک جامد کوڈ تجزیہ ٹول ہے جو C، C++، C# اور Java میں لکھے گئے پروگراموں میں غلطیوں اور ممکنہ کمزوریوں کی نشاندہی کرنے کے لیے ڈیزائن کیا گیا ہے۔ 64 بٹ ونڈوز، لینکس، اور میک او ایس سسٹمز پر چلتا ہے، اور 32 بٹ، 64 بٹ، اور ایمبیڈڈ اے آر ایم پلیٹ فارمز کے لیے ڈیزائن کردہ کوڈ کا تجزیہ کر سکتا ہے۔ اگر یہ آپ پہلی بار اپنے پروجیکٹس کو چیک کرنے کے لیے جامد کوڈ کے تجزیہ کی کوشش کر رہے ہیں، تو ہم تجویز کرتے ہیں کہ آپ اپنے آپ کو اس سے واقف کر لیں۔ مضمون سب سے دلچسپ PVS-Studio وارننگز کو تیزی سے دیکھنے اور اس ٹول کی صلاحیتوں کا اندازہ لگانے کے بارے میں۔

Azure DevOps - کلاؤڈ سروسز کا ایک سیٹ جو مشترکہ طور پر پورے ترقیاتی عمل کا احاطہ کرتا ہے۔ اس پلیٹ فارم میں Azure Pipelines، Azure Boards، Azure Artifacts، Azure Repos، Azure Test Plans جیسے ٹولز شامل ہیں، جو آپ کو سافٹ ویئر بنانے کے عمل کو تیز کرنے اور اس کے معیار کو بہتر بنانے کی اجازت دیتے ہیں۔

چاکلیٹ ونڈوز کے لیے ایک اوپن سورس پیکیج مینیجر ہے۔ اس پروجیکٹ کا ہدف ونڈوز آپریٹنگ سسٹمز پر انسٹالیشن سے لے کر اپ ڈیٹ اور ان انسٹال کرنے تک پورے سافٹ ویئر لائف سائیکل کو خودکار بنانا ہے۔

چاکلیٹی کے استعمال کے بارے میں

آپ اس پر خود پیکیج مینیجر کو انسٹال کرنے کا طریقہ دیکھ سکتے ہیں۔ لنک. تجزیہ کار انسٹال کرنے کے لیے مکمل دستاویزات پر دستیاب ہے۔ لنک چاکلیٹی پیکیج مینیجر سیکشن کا استعمال کرتے ہوئے انسٹالیشن دیکھیں۔ میں وہاں سے کچھ نکات کو مختصراً دہراؤں گا۔

تجزیہ کار کا تازہ ترین ورژن انسٹال کرنے کا حکم:

choco install pvs-studio

PVS-Studio پیکیج کا مخصوص ورژن انسٹال کرنے کا حکم:

choco install pvs-studio --version=7.05.35617.2075

پہلے سے طے شدہ طور پر، صرف تجزیہ کار کا بنیادی حصہ، بنیادی جزو، نصب ہوتا ہے۔ دیگر تمام جھنڈے (اسٹینڈ ایلون، JavaCore، IDEA، MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) --package-parameters کا استعمال کرتے ہوئے پاس کیے جا سکتے ہیں۔

کمانڈ کی ایک مثال جو بصری اسٹوڈیو 2019 کے لیے پلگ ان کے ساتھ ایک تجزیہ کار انسٹال کرے گی۔

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

اب آئیے Azure DevOps کے تحت تجزیہ کار کے آسان استعمال کی ایک مثال دیکھیں۔

ایڈجسٹمنٹ

میں آپ کو یاد دلاتا ہوں کہ اکاؤنٹ رجسٹر کرنے، بلڈ پائپ لائن بنانے اور اپنے اکاؤنٹ کو GitHub ریپوزٹری میں واقع پروجیکٹ کے ساتھ ہم آہنگ کرنے جیسے مسائل کے بارے میں ایک الگ سیکشن موجود ہے۔ مضمون. ہمارا سیٹ اپ فوری طور پر کنفیگریشن فائل لکھنے کے ساتھ شروع ہوگا۔

سب سے پہلے، آئیے ایک لانچ ٹرگر ترتیب دیں، جس سے یہ ظاہر ہوتا ہے کہ ہم صرف میں تبدیلیوں کے لیے لانچ کرتے ہیں۔ ماسٹر شاخ:

trigger:
- master

اگلا ہمیں ایک ورچوئل مشین کو منتخب کرنے کی ضرورت ہے۔ ابھی کے لیے یہ ونڈوز سرور 2019 اور ویژول اسٹوڈیو 2019 کے ساتھ مائیکروسافٹ کی میزبانی والا ایجنٹ ہوگا۔

pool:
  vmImage: 'windows-latest'

آئیے کنفیگریشن فائل کے باڈی پر چلتے ہیں (block اقدامات)۔ اس حقیقت کے باوجود کہ آپ ورچوئل مشین میں صوابدیدی سافٹ ویئر انسٹال نہیں کر سکتے، میں نے ڈوکر کنٹینر شامل نہیں کیا۔ ہم Chocolatey کو Azure DevOps کے لیے ایک توسیع کے طور پر شامل کر سکتے ہیں۔ ایسا کرنے کے لیے، چلو چلتے ہیں۔ لنک. کلک کریں۔ یہ مفت حاصل کریں. اگلا، اگر آپ پہلے سے مجاز ہیں، تو بس اپنا اکاؤنٹ منتخب کریں، اور اگر نہیں، تو اجازت کے بعد وہی کام کریں۔

PVS-Studio اب Chocolatey میں ہے: Azure DevOps کے تحت سے Chocolatey کو چیک کر رہا ہے

یہاں آپ کو یہ منتخب کرنے کی ضرورت ہے کہ ہم ایکسٹینشن کہاں شامل کریں گے اور بٹن پر کلک کریں۔ انسٹال.

PVS-Studio اب Chocolatey میں ہے: Azure DevOps کے تحت سے Chocolatey کو چیک کر رہا ہے

کامیاب تنصیب کے بعد، کلک کریں تنظیم کی طرف بڑھیں۔:

PVS-Studio اب Chocolatey میں ہے: Azure DevOps کے تحت سے Chocolatey کو چیک کر رہا ہے

اب آپ ونڈو میں چاکلیٹی ٹاسک کے لیے ٹیمپلیٹ دیکھ سکتے ہیں۔ کاموں کنفیگریشن فائل میں ترمیم کرتے وقت azure-pipelines.yml:

PVS-Studio اب Chocolatey میں ہے: Azure DevOps کے تحت سے Chocolatey کو چیک کر رہا ہے

Chocolatey پر کلک کریں اور فیلڈز کی فہرست دیکھیں:

PVS-Studio اب Chocolatey میں ہے: Azure DevOps کے تحت سے Chocolatey کو چیک کر رہا ہے

یہاں ہمیں منتخب کرنے کی ضرورت ہے۔ انسٹال ٹیموں کے ساتھ میدان میں۔ میں Nuspec فائل کا نام مطلوبہ پیکیج کے نام کی نشاندہی کریں - pvs-studio۔ اگر آپ ورژن کی وضاحت نہیں کرتے ہیں، تو تازہ ترین انسٹال ہو جائے گا، جو ہمارے لیے بالکل موزوں ہے۔ آئیے بٹن دباتے ہیں۔ شامل کریں اور ہم کنفیگریشن فائل میں جنریٹڈ ٹاسک دیکھیں گے۔

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

اگلا، آئیے اپنی فائل کے مرکزی حصے کی طرف چلتے ہیں:

- task: CmdLine@2
  inputs:
    script: 

اب ہمیں تجزیہ کار لائسنس کے ساتھ ایک فائل بنانے کی ضرورت ہے۔ یہاں PVSNAME и PVSKEY - متغیرات کے نام جن کی قدریں ہم سیٹنگز میں بیان کرتے ہیں۔ وہ PVS-Studio لاگ ان اور لائسنس کلید کو ذخیرہ کریں گے۔ ان کی اقدار کو سیٹ کرنے کے لیے، مینو کھولیں۔ متغیرات-> نیا متغیر. آئیے متغیرات بنائیں PVSNAME لاگ ان کے لیے اور PVSKEY تجزیہ کار کلید کے لیے۔ باکس کو چیک کرنا نہ بھولیں۔ اس قدر کو خفیہ رکھیں لیے PVSKEY. کمانڈ کوڈ:

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

آئیے ریپوزٹری میں واقع bat فائل کا استعمال کرتے ہوئے پروجیکٹ بنائیں:

сall build.bat

آئیے ایک فولڈر بنائیں جہاں تجزیہ کار کے نتائج والی فائلیں محفوظ ہوں گی۔

сall mkdir PVSTestResults

آئیے پروجیکٹ کا تجزیہ شروع کریں:

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

ہم PlogConverter یوٹیلیٹی کا استعمال کرتے ہوئے اپنی رپورٹ کو 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 کو چیک کر رہا ہے

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

زیر غور ٹکڑے میں، یہ ایک معمولی خامی ہے۔ جی ہاں، اس حالت کو & آپریٹر کو && آپریٹر سے بدل کر بہتر بنایا جا سکتا ہے، لیکن عملی نقطہ نظر سے، اس سے کوئی چیز متاثر نہیں ہوتی ہے۔ تاہم، دیگر صورتوں میں، & اور && کے درمیان الجھن سنگین مسائل کا سبب بن سکتی ہے جب اظہار کے دائیں جانب کو غلط/غلط اقدار کے ساتھ برتا جاتا ہے۔ مثال کے طور پر، ہماری غلطیوں کے مجموعہ میں، V3093 تشخیصی کا استعمال کرتے ہوئے شناخت کیا گیا۔، یہ معاملہ ہے:

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

یہاں تک کہ اگر انڈیکس k غلط ہے، یہ ایک سرنی عنصر تک رسائی کے لیے استعمال کیا جائے گا۔ نتیجے کے طور پر، ایک استثناء پھینک دیا جائے گا IndexOutOfRangeException.

انتباہات N3, N4

تجزیہ کار انتباہ: V3022 [CWE-571] اظہار 'شارٹ پرامپٹ' ہمیشہ سچ ہے۔ InteractivePrompt.cs 101
تجزیہ کار انتباہ: V3022 [CWE-571] اظہار 'شارٹ پرامپٹ' ہمیشہ سچ ہے۔ 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");
}

کوڈ کے اس حصے کو لکھنے والے پروگرامر نے آخری دو لائنوں کو کاپی اور پیسٹ کیا اور ان میں ترمیم کرنا بھول گیا۔ اس کی وجہ سے، چاکلیٹی صارفین پیرامیٹر کو لاگو کرنے سے قاصر تھے۔ apikey کچھ اور طریقے۔ مندرجہ بالا پیرامیٹرز کی طرح، میں درج ذیل اختیارات پیش کر سکتا ہوں:

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

کاپی پیسٹ کی غلطیوں کے کسی بھی پروجیکٹ میں جلد یا بدیر ظاہر ہونے کا زیادہ امکان ہوتا ہے جس میں سورس کوڈ کی ایک بڑی مقدار ہوتی ہے، اور ان کا مقابلہ کرنے کے لیے ایک بہترین ٹول جامد تجزیہ ہے۔

PS اور ہمیشہ کی طرح، یہ ایرر ملٹی لائن کنڈیشن کے آخر میں ظاہر ہوتا ہے :)۔ اشاعت دیکھیں "آخری لائن کا اثر".

وارننگ N8

تجزیہ کار انتباہ: V3095 [CWE-476] 'installedPackage' آبجیکٹ کو null کے خلاف تصدیق کرنے سے پہلے استعمال کیا گیا تھا۔ لائنیں چیک کریں: 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)
  {
    ....
  }
  ....
}

کلاسیکی غلطی: پہلے اعتراض کریں۔ انسٹال شدہ پیکیج استعمال کیا جاتا ہے اور پھر جانچ پڑتال کی جاتی ہے۔ شہوت انگیز null. یہ تشخیص ہمیں پروگرام میں دو مسائل میں سے ایک کے بارے میں بتاتا ہے: یا تو انسٹال شدہ پیکیج کبھی برابر نہیں شہوت انگیز null، جو مشکوک ہے، اور پھر چیک بے کار ہے، یا ہمیں ممکنہ طور پر کوڈ میں ایک سنگین غلطی ہو سکتی ہے - ایک کالعدم حوالہ تک رسائی کی کوشش۔

حاصل يہ ہوا

لہذا ہم نے ایک اور چھوٹا قدم اٹھایا ہے - اب PVS-Studio کا استعمال اور بھی آسان اور آسان ہو گیا ہے۔ میں یہ بھی کہنا چاہوں گا کہ Chocolatey ایک اچھا پیکیج مینیجر ہے جس میں کوڈ میں بہت کم غلطیاں ہیں، جو PVS-Studio استعمال کرتے وقت اور بھی کم ہو سکتی ہیں۔

ہم دعوت دیتے ہیں ڈاؤن لوڈ، اتارنا اور PVS-Studio کو آزمائیں۔ جامد تجزیہ کار کا باقاعدہ استعمال آپ کی ٹیم کے تیار کردہ کوڈ کے معیار اور وشوسنییتا کو بہتر بنائے گا اور بہت سے لوگوں کو روکنے میں مدد کرے گا۔ صفر دن کے خطرات.

PS

اشاعت سے پہلے، ہم نے مضمون کو Chocolatey کے ڈویلپرز کو بھیجا، اور انہیں اسے اچھی طرح موصول ہوا۔ ہمیں کوئی اہم چیز نہیں ملی، لیکن انہوں نے، مثال کے طور پر، ہمیں "api-key" کلید سے متعلق پایا بگ پسند کیا۔

PVS-Studio اب Chocolatey میں ہے: Azure DevOps کے تحت سے Chocolatey کو چیک کر رہا ہے

اگر آپ انگریزی بولنے والے سامعین کے ساتھ اس مضمون کا اشتراک کرنا چاہتے ہیں، تو براہ کرم ترجمہ کا لنک استعمال کریں: Vladislav Stolyarov۔ PVS-Studio اب Chocolatey میں ہے: Azure DevOps کے تحت چاکلیٹی کو چیک کرنا.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں