PVS-Studio เบ”เบฝเบงเบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Chocolatey: เบเบงเบ”เป€เบšเบดเปˆเบ‡ Chocolatey เบˆเบฒเบเบžเบฒเบเปƒเบ•เป‰ Azure DevOps

PVS-Studio เบ”เบฝเบงเบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Chocolatey: เบเบงเบ”เป€เบšเบดเปˆเบ‡ Chocolatey เบˆเบฒเบเบžเบฒเบเปƒเบ•เป‰ Azure DevOps
เบžเบงเบเป€เบฎเบปเบฒเบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ PVS-Studio เบชเบฐเบ”เบงเบเบเบงเปˆเบฒ. เบ”เบฝเบงเบ™เบตเป‰เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเปƒเบซเป‰เบขเบนเปˆเปƒเบ™ Chocolatey, เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”เบ‚เบญเบ‡ Windows. เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบงเปˆเบฒเบ™เบตเป‰เบˆเบฐเบชเป‰เบฒเบ‡เบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ PVS-Studio, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เปƒเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ„เบฅเบฒเบง. เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เป„เบ›เป„เบ, เปƒเบซเป‰เบเบงเบ”เป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡ Chocolatey เบ”เบฝเบงเบเบฑเบ™. Azure DevOps เบˆเบฐเป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบฅเบฐเบšเบปเบš CI.

เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบญเบทเปˆเบ™เป†เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเปˆเบฝเบงเบเบฑเบšเบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบšเบฅเบฐเบšเบปเบšเบŸเบฑเบ‡:

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบเบฑเบšเบšเบปเบ”เบ„เบงเบฒเบกเบ—เปเบฒเบญเบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบš Azure DevOps, เป€เบžเบฒเบฐเบงเปˆเบฒเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบšเบฒเบ‡เบˆเบธเบ”เบ–เบทเบเบฅเบฐเป€เบงเบฑเป‰เบ™เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบŠเป‰เปเบฒเบเบฑเบ™.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบงเบดเบฅเบฐเบŠเบปเบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰:

PVS Studio เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฐเบซเบฑเบ”เบชเบฐเบ–เบดเบ”เบ—เบตเปˆเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเบฅเบฐเบšเบธเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” เปเบฅเบฐ เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เป‚เบ›เบฃเปเบเบฃเบกเบ—เบตเปˆเบ‚เบฝเบ™เปƒเบ™ C, C++, C# เปเบฅเบฐ Java. เปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบš 64-bit Windows, Linux, เปเบฅเบฐ macOS, เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบงเบดเป€เบ„เบฒเบฐเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบญเบญเบเปเบšเบšเบกเบฒเบชเปเบฒเบฅเบฑเบš 32-bit, 64-bit, เปเบฅเบฐ embedded ARM platforms. เบ–เป‰เบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฐเบซเบฑเบ”เบ„เบปเบ‡เบ—เบตเปˆเป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ—เปˆเบฒเบ™เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡ เบšเบปเบ”เบ„เบงเบฒเบก เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เป€เบšเบดเปˆเบ‡เบ„เปเบฒเป€เบ•เบทเบญเบ™ PVS-Studio เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ—เบตเปˆเบชเบธเบ”เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเปเบฅเบฐเบ›เบฐเป€เบกเบตเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ™เบตเป‰.

Azure DevOps โ€” เบŠเบธเบ”เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ„เบฅเบฒเบงเบ—เบตเปˆเบฎเปˆเบงเบกเบเบฑเบ™เบ›เบปเบเบ„เบธเบกเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบฑเบ‡เปเบปเบ”. เป€เบงเบ—เบตเบ™เบตเป‰เบ›เบฐเบเบญเบšเบกเบตเป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบŠเบฑเปˆเบ™: Azure Pipelines, Azure Boards, Azure Artifacts, Azure Repos, Azure Test Plans, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบฑเปˆเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบŠเบญเบšเปเบงเปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡เบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบกเบฑเบ™.

Chocolatey เป€เบ›เบฑเบ™เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เปเบžเบฑเบเป€เบเบฑเบ”เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบชเปเบฒเบฅเบฑเบš Windows. เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เปเบกเปˆเบ™โ€‹เป€เบžเบทเปˆเบญโ€‹เบญเบฑเบ”โ€‹เบ•เบฐโ€‹เป‚เบ™โ€‹เบกเบฑเบ”โ€‹เบงเบปเบ‡โ€‹เบˆเบญเบ™โ€‹เบŠเบญเบšโ€‹เปเบงโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เป€เบ–เบดเบ‡โ€‹เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เปเบฅเบฐโ€‹เบ–เบญเบ™โ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™ Windowsโ€‹.

เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปƒเบŠเป‰ Chocolatey

เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ•เบปเบงโ€‹เบˆเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบŠเบธเบ”โ€‹เบ•เบปเบงโ€‹เบ‚เบญเบ‡โ€‹เบกเบฑเบ™โ€‹เป€เบญเบ‡โ€‹เบขเบนเปˆโ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹ เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ. เป€เบญเบเบฐเบชเบฒเบ™เบ„เบปเบšเบ–เป‰เบงเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเปเบกเปˆเบ™เบกเบตเบขเบนเปˆ เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบ”เบเปƒเบŠเป‰เบชเปˆเบงเบ™เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ” 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.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบ—เบตเปˆเบกเบต plugin เบชเปเบฒเบฅเบฑเบš Visual Studio 2019:

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

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบชเบฐเบ”เบงเบเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบžเบฒเบเปƒเบ•เป‰ Azure DevOps.

เบเบฒเบ™เบ›เบฑเบš

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เปเป€เบ•เบทเบญเบ™เบ—เปˆเบฒเบ™เบงเปˆเบฒเบกเบตเบžเบฒเบเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบšเบฑเบ™เบซเบฒเป€เบŠเบฑเปˆเบ™เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบšเบฑเบ™เบŠเบต, เบเบฒเบ™เบชเป‰เบฒเบ‡ Pipeline เปเบฅเบฐ synchronizing เบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™ GitHub. เบšเบปเบ”เบ„เบงเบฒเบก. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เบ—เบฑเบ™เบ—เบตเบ”เป‰เบงเบเบเบฒเบ™เบ‚เบฝเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ.

เบเปˆเบญเบ™เบญเบทเปˆเบ™, เปƒเบซเป‰เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเบเบฐเบ•เบธเป‰เบ™เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง, เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™ เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš เบชเบฒเบ‚เบฒ:

trigger:
- master

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฅเบทเบญเบเป€เบ„เบทเปˆเบญเบ‡ virtual. เบชเปเบฒเบฅเบฑเบšเบ•เบญเบ™เบ™เบตเป‰เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™ Microsoft-hosted เบเบฑเบš Windows Server 2019 เปเบฅเบฐ Visual Studio 2019:

pool:
  vmImage: 'windows-latest'

เปƒเบซเป‰เบเป‰เบฒเบเป„เบ›เบซเบฒเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ (block เบ‚เบฑเป‰เบ™เบ•เบญเบ™). เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบญเบšเปเบงเบ—เบตเปˆเบ•เบปเบ™เป€เบญเบ‡เบกเบฑเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual, เบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เป€เบžเบตเปˆเบก Docker container. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบก Chocolatey เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบชเปเบฒเบฅเบฑเบš Azure DevOps. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เปƒเบซเป‰เป„เบ› เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ. เบเบปเบ” เป„เบ”เป‰เบฎเบฑเบšเบŸเบฃเบต. เบ•เปเปˆเป„เบ›, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบญเบฐเบ™เบธเบเบฒเบ”เปเบฅเป‰เบง, เบžเบฝเบ‡เปเบ•เปˆเป€เบฅเบทเบญเบเบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เปเบฅเบฐเบ–เป‰เบฒเบšเปเปˆเปเบกเปˆเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบซเป‰เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”.

PVS-Studio เบ”เบฝเบงเบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Chocolatey: เบเบงเบ”เป€เบšเบดเปˆเบ‡ Chocolatey เบˆเบฒเบเบžเบฒเบเปƒเบ•เป‰ Azure DevOps

เบ—เบตเปˆเบ™เบตเป‰เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฅเบทเบญเบเบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบžเบตเปˆเบกเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเปเบฅเบฐเบ„เบฅเบดเบเปƒเบชเปˆเบ›เบธเปˆเบก เบ•เบดเบ”เบ•เบฑเป‰เบ‡.

PVS-Studio เบ”เบฝเบงเบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Chocolatey: เบเบงเบ”เป€เบšเบดเปˆเบ‡ Chocolatey เบˆเบฒเบเบžเบฒเบเปƒเบ•เป‰ Azure DevOps

เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เปƒเบซเป‰เบ„เบฅเบดเบเปƒเบชเปˆ เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเบฑเบšเบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡:

PVS-Studio เบ”เบฝเบงเบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Chocolatey: เบเบงเบ”เป€เบšเบดเปˆเบ‡ Chocolatey เบˆเบฒเบเบžเบฒเบเปƒเบ•เป‰ Azure DevOps

เบ•เบญเบ™เบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เปเบกเปˆเปเบšเบšเบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™ Chocolatey เบขเบนเปˆเปƒเบ™เบ›เปˆเบญเบ‡เบขเป‰เบฝเบก เบงเบฝเบเบ‡เบฒเบ™ เป€เบกเบทเปˆเบญเปเบเป‰เป„เบ‚เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ azure-pipelines.yml:

PVS-Studio เบ”เบฝเบงเบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Chocolatey: เบเบงเบ”เป€เบšเบดเปˆเบ‡ Chocolatey เบˆเบฒเบเบžเบฒเบเปƒเบ•เป‰ Azure DevOps

เปƒเบซเป‰เบ„เบฅเบดเบเปƒเบชเปˆ Chocolatey เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™:

PVS-Studio เบ”เบฝเบงเบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Chocolatey: เบเบงเบ”เป€เบšเบดเปˆเบ‡ Chocolatey เบˆเบฒเบเบžเบฒเบเปƒเบ•เป‰ Azure DevOps

เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฅเบทเบญเบ เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ เบขเบนเปˆเปƒเบ™เบชเบฐเบซเบ™เบฒเบกเบเบฑเบšเบ—เบตเบกเบ‡เบฒเบ™. IN เบŠเบทเปˆเป„เบŸเบฅเปŒ 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 เบ—เบตเปˆเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ repository:

ัall build.bat

เบกเบฒเบชเป‰เบฒเบ‡เป‚เบŸเบ™เป€เบ”เบตเบ—เบตเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบˆเบฐเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰:

ัall mkdir PVSTestResults

เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป‚เบ„เบ‡เบเบฒเบ™:

ัall "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" 
โ€“t .srcchocolatey.sln โ€“o .PVSTestResultsChoco.plog 

เบžเบงเบเป€เบฎเบปเบฒเบ›เปˆเบฝเบ™เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบฑเบ™เบฎเบนเบšเปเบšเบš html เป‚เบ”เบเปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ” Plogะกonverter:

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

เปƒเบซเป‰เบ„เบฅเบดเบ Save->Save->Run เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบงเบฝเบเบ‡เบฒเบ™. เปƒเบซเป‰เบ”เบฒเบงเป‚เบซเบผเบ”เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เป‚เบ”เบเบเบฒเบ™เป„เบ›เบ—เบตเปˆเปเบ–เบšเปœเป‰เบฒเบงเบฝเบ.

PVS-Studio เบ”เบฝเบงเบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Chocolatey: เบเบงเบ”เป€เบšเบดเปˆเบ‡ Chocolatey เบˆเบฒเบเบžเบฒเบเปƒเบ•เป‰ Azure DevOps

เป‚เบ„เบ‡เบเบฒเบ™ Chocolatey เบกเบตเบžเบฝเบ‡ 37615 เป€เบชเบฑเป‰เบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” C#. เบ‚เปเปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบšเบฒเบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบžเบปเบš.

เบœเบปเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš

เบ„เบณเป€เบ•เบทเบญเบ™ 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] เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ '&' เบ›เบฐเป€เบกเบตเบ™เบ—เบฑเบ‡เบชเบญเบ‡ operand. เบšเบฒเบ‡เบ—เบตเบ„เบงเบ™เปƒเบŠเป‰เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ '&&' เบงเบปเบ‡เบˆเบญเบ™เบชเบฑเป‰เบ™เปเบ—เบ™. 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 เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบš array. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบˆเบฐเบ–เบทเบเบ–เบดเป‰เบก 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
    ....
  }
  ....
}

เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ™เบตเป‰โ€‹, เบกเบตโ€‹เป€เบซเบ”โ€‹เบœเบปเบ™ strange เบขเบนเปˆโ€‹เป€เบšเบทเป‰เบญเบ‡โ€‹เบซเบฅเบฑเบ‡โ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบœเบนเป‰โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™ ternaryโ€‹. เบฅเบญเบ‡เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบšเบดเปˆเบ‡: เบ–เป‰เบฒเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเบ‚เป‰เบญเบเบซเบกเบฒเบเบ”เป‰เบงเบเป€เบฅเบ 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 เบชเบญเบ‡เบชเบฒเบกเปเบ–เบงเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบกเปˆเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™เบชเบนเบ™, เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ ternary เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เปˆเบฒ เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ™เบตเป‰, เบฎเปˆเบฒเบ‡เบเบฒเบเบ‚เบญเบ‡ 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 != 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] เบงเบฑเบ”เบ–เบธ '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, เป€เบŠเบดเปˆเบ‡เบกเบตเบ„เบงเบฒเบกเบชเบปเบ‡เปƒเบช, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปเบกเปˆเบ™เบŠเป‰เปเบฒเบŠเป‰เบญเบ™, เบซเบผเบทเบžเบงเบเป€เบฎเบปเบฒเบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เปƒเบ™เบฅเบฐเบซเบฑเบ” - เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเปƒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡ null .

เบชเบฐเบซเบฅเบธเบš

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบญเบตเบ - เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ PVS-Studio เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ‡เปˆเบฒเบเปเบฅเบฐเบชเบฐเบ”เบงเบเบเบงเปˆเบฒ. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบขเบฒเบเป€เบงเบปเป‰เบฒเบงเปˆเบฒ Chocolatey เป€เบ›เบฑเบ™เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™เบฅเบฐเบซเบฑเบ”, เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเบซเบ™เป‰เบญเบเบฅเบปเบ‡เป€เบกเบทเปˆเบญเปƒเบŠเป‰ PVS-Studio.

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบตเบ™เบ—เปˆเบฒเบ™ ัะบะฐั‡ะฐั‚ัŒ เปเบฅเบฐเบฅเบญเบ‡ PVS-Studio. เบเบฒเบ™เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เป€เบ›เบฑเบ™เบ›เบฐเบˆเบณเบˆเบฐเบŠเปˆเบงเบเบ›เบฑเบšเบ›เบธเบ‡เบ„เบธเบ™เบ™เบฐเบžเบฒเบš เปเบฅเบฐ เบ„เบงเบฒเบกเปœเป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบทเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ—เบตเบกเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบžเบฑเบ”เบ—เบฐเบ™เบฒ เปเบฅเบฐเบŠเปˆเบงเบเบ›เป‰เบญเบ‡เบเบฑเบ™เบซเบผเบฒเบเป†เบขเปˆเบฒเบ‡. เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบšเปเปˆเบกเบตเบกเบทเป‰.

PS

เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบžเบดเบกเป€เบœเบตเบเปเบœเปˆ, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบปเปˆเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเปƒเบซเป‰เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ Chocolatey, เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบกเบฑเบ™เบ”เบต. เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบžเบปเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™, เปเบ•เปˆเบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบžเบงเบเป€เบ‚เบปเบฒเบกเบฑเบเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบปเบšเป€เบซเบฑเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบ›เบธเปˆเบก "api-key".

PVS-Studio เบ”เบฝเบงเบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Chocolatey: เบเบงเบ”เป€เบšเบดเปˆเบ‡ Chocolatey เบˆเบฒเบเบžเบฒเบเปƒเบ•เป‰ Azure DevOps

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบเบฑเบšเบœเบนเป‰เบŠเบปเบกเบ—เบตเปˆเป€เบงเบปเป‰เบฒเบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”, เบเบฐเบฅเบธเบ™เบฒเปƒเบŠเป‰เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฒเบ™เปเบ›เบžเบฒเบชเบฒ: Vladislav Stolyarov. PVS-Studio เบ•เบญเบ™เบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Chocolatey: เบเบงเบ”เป€เบšเบดเปˆเบ‡ Chocolatey เบžเบฒเบเปƒเบ•เป‰ Azure DevOps.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™