PVS-Studio αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„ ChocolateyαŸ– αž–αž·αž“αž·αžαŸ’αž™ Chocolatey αž–αžΈαž€αŸ’αžšαŸ„αž˜ Azure DevOps

PVS-Studio αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„ ChocolateyαŸ– αž–αž·αž“αž·αžαŸ’αž™ Chocolatey αž–αžΈαž€αŸ’αžšαŸ„αž˜ Azure DevOps
αž™αžΎαž„αž”αž“αŸ’αžαž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ PVS-Studio αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αžšαž”αžŸαŸ‹αž™αžΎαž„αž₯αž‘αžΌαžœαž“αŸαŸ‡αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ Chocolatey αžŠαŸ‚αž›αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Windows αŸ” αž™αžΎαž„αž‡αžΏαž‡αžΆαž€αŸ‹αžαžΆαž“αŸαŸ‡αž“αžΉαž„αž‡αž½αž™αžŸαž˜αŸ’αžšαž½αž›αžŠαž›αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ PVS-Studio αž‡αžΆαž–αž·αžŸαŸαžŸαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž–αž–αž€αŸ” αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž€αž»αŸ†β€‹αž²αŸ’αž™β€‹αž‘αŸ…β€‹αžŽαžΆβ€‹αž†αŸ’αž„αžΆαž™β€‹ αžαŸ„αŸ‡β€‹αž‘αŸ…β€‹αž–αž·αž“αž·αžαŸ’αž™β€‹αž”αŸ’αžšαž—αž–β€‹αž€αžΌαžŠβ€‹αžšαž”αžŸαŸ‹ Chocolatey αžŠαžΌαž…β€‹αž‚αŸ’αž“αžΆαŸ” Azure DevOps αž“αžΉαž„αžŠαžΎαžšαžαž½αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI αŸ”

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž‡αžΈαž“αŸƒαž’αžαŸ’αžαž”αž‘αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžšαž”αžŸαŸ‹αž™αžΎαž„αž›αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸƒαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž–αž–αž€αŸ–

αžαŸ’αž‰αž»αŸ†αžŽαŸ‚αž“αžΆαŸ†αž’αŸ’αž“αž€αž±αŸ’αž™αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž›αžΎαž’αžαŸ’αžαž”αž‘αžŠαŸ†αž”αžΌαž„αž’αŸ†αž–αžΈαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™ Azure DevOps αž–αŸ’αžšαŸ„αŸ‡αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž…αŸ†αžŽαž»αž…αž˜αž½αž™αž…αŸ†αž“αž½αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž…αŸ„αž› αžŠαžΎαž˜αŸ’αž”αžΈαž€αž»αŸ†αž±αŸ’αž™αž…αž˜αŸ’αž›αž„αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΈαžšαž”αž»αžšαžŸαž“αŸƒαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αŸ–

αž—αžΈαŸ” αž’αŸαžŸαŸ” αž’αŸαžŸαŸ” αžŸαŸ’αž‘αžΌαžŒαžΈαž™αŸ„ αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž€αžΌαžŠαž‹αž·αžαž·αžœαž“αŸ’αžαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž€αŸ†αž αž»αžŸ αž“αž·αž„αž—αžΆαž–αž„αžΆαž™αžšαž„αž‚αŸ’αžšαŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαž€αŸ’αž“αž»αž„ C, C++, C# αž“αž·αž„ Java αŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’ 64-bit Windows, Linux αž“αž·αž„ macOS αž αžΎαž™αž’αžΆαž…αžœαž·αž—αžΆαž‚αž€αžΌαžŠαžŠαŸ‚αž›αž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαŸαž‘αž·αž€αžΆ 32-bit, 64-bit αž“αž·αž„ ARM αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αž”αŸ‹αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αŸαŸ‡αž‡αžΆαž›αžΎαž€αž‘αžΈαž˜αž½αž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαŸ‚αž›αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αŸ’αžœαžΎαž€αžΆαžšαžœαž·αž—αžΆαž‚αž€αžΌαžŠαž‹αž·αžαž·αžœαž“αŸ’αž αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž™αžΎαž„αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αž’αŸ’αž“αž€αžŸαŸ’αž‚αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž’αŸ’αž“αž€αž‡αžΆαž˜αž½αž™ αž’αžαŸ’αžαž”αž‘ αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž˜αžΎαž›αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“ PVS-Studio αžŠαŸ‚αž›αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž”αŸ†αž•αž»αžαž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αž“αž·αž„αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαžŸαž˜αžαŸ’αžαž—αžΆαž–αž“αŸƒαž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αŸ”

Azure DevOps - αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž–αž–αž€αžŠαŸ‚αž›αžšαž½αž˜αž‚αŸ’αž“αžΆαž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ” αžœαŸαž‘αž·αž€αžΆαž“αŸαŸ‡αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž§αž”αž€αžšαžŽαŸαžŠαžΌαž…αž‡αžΆ Azure Pipelines, Azure Boards, Azure Artifacts, Azure Repos, Azure Test Plans αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αž€αŸ‚αž›αž˜αŸ’αž’αž‚αž»αžŽαž—αžΆαž–αžšαž”αžŸαŸ‹αžœαžΆαŸ”

αžŸαžΌαž€αžΌαž‘αžΆ αž‚αžΊαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Windows αŸ” αž‚αŸ„αž›αžŠαŸ…αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžŠαŸ’αžαž‡αžΈαžœαž·αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž˜αžΌαž›αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž–αžΈαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžšαž αžΌαžαžŠαž›αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αž“αž·αž„αž€αžΆαžšαž›αž»αž”αž“αŸ…αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš Windows αŸ”

αž’αŸ†αž–αžΈαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαžΌαž€αžΌαž‘αžΆ

αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž–αžΈαžšαž”αŸ€αž”αžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹ αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹. αž―αž€αžŸαžΆαžšαž–αŸαž‰αž›αŸαž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ… αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹ αžŸαžΌαž˜αž˜αžΎαž›αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎαž•αŸ’αž“αŸ‚αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹ 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

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž™αžΎαž„αžαŸ’αžšαžΌαžœαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡ αžœαžΆαž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆαž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαžŠαŸ‚αž›αžšαŸ€αž”αž…αŸ†αžŠαŸ„αž™ Microsoft αž‡αžΆαž˜αž½αž™ Windows Server 2019 αž“αž·αž„ Visual Studio 2019αŸ–

pool:
  vmImage: 'windows-latest'

αž…αžΌαžšαž”αž“αŸ’αžαž‘αŸ…αžαž½αž“αŸƒαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ (αž”αŸ’αž›αž»αž€ αž‡αŸ†αž αžΆαž“) αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αŸ†αž–αžΆαž“αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž€αŸαžŠαŸ„αž™ αž€αŸαžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ 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 αž“αž·αž„αž›αŸαžαž€αžΌαžŠαž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžαž˜αŸ’αž›αŸƒαžšαž”αžŸαŸ‹αžœαžΆ αžŸαžΌαž˜αž”αžΎαž€αž˜αŸ‰αžΊαž“αž»αž™ Variables-> αž’αžαŸαžšαžαŸ’αž˜αžΈαŸ”. αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαžαž’αžαŸαžš PVSNAME αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αžΌαž›αž“αž·αž„ PVSKEY αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž“αŸ’αž›αžΉαŸ‡αžœαž·αž—αžΆαž‚αŸ” αž€αž»αŸ†αž—αŸ’αž›αŸαž…αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž”αŸ’αžšαž’αž”αŸ‹ αžšαž€αŸ’αžŸαžΆαžαž˜αŸ’αž›αŸƒαž“αŸαŸ‡αž‡αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ PVSKEY. αž€αžΌαžŠβ€‹αž”αž‰αŸ’αž‡αžΆαŸ–

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

αž…αžΌαžšαž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ„αž™αž”αŸ’αžšαžΎαž―αž€αžŸαžΆαžš bat αžŠαŸ‚αž›αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αŸ–

сall build.bat

αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαž folder αžŠαŸ‚αž›αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž›αž‘αŸ’αž’αž•αž›αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ–

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

αžαŸ„αŸ‡αž…αž»αž… αžšαž€αŸ’αžŸαžΆαž‘αž»αž€ -> αžšαž€αŸ’αžŸαžΆαž‘αž»αž€ -> αžšαžαŸ‹ αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž—αžΆαžšαž€αž·αž…αŸ’αž…αŸ” αžαŸ„αŸ‡αž‘αžΆαž‰αž™αž€αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžŠαŸ„αž™αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž•αŸ’αž‘αžΆαŸ†αž„αž€αž·αž…αŸ’αž…αž€αžΆαžšαŸ”

PVS-Studio αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„ ChocolateyαŸ– αž–αž·αž“αž·αžαŸ’αž™ Chocolatey αž–αžΈαž€αŸ’αžšαŸ„αž˜ Azure DevOps

αž‚αž˜αŸ’αžšαŸ„αž„ Chocolatey αž˜αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ‚ 37615 αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αŸƒαž€αžΌαžŠ C# αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž€αŸ†αž αž»αžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž”αžΆαž“αžšαž€αžƒαžΎαž‰αŸ”

αž›αž‘αŸ’αž’αž•αž›β€‹αžαŸβ€‹αžŸαŸ’αž

αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“ 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] αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš '&' αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž–αžΈαžšαŸ” αž”αŸ’αžšαž αŸ‚αž›β€‹αž‡αžΆβ€‹αžŸαŸ€αž‚αŸ’αžœαžΈβ€‹αžαŸ’αž›αžΈ '&&' operator αž‚αž½αžšβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ’αžšαžΎβ€‹αž‡αŸ†αž“αž½αžŸβ€‹αžœαž·αž‰αŸ” 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;
  }
}

αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš & αž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš && αž‚αžΊαžαžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž†αŸ’αžœαŸαž„αž“αŸƒαž€αž“αŸ’αžŸαŸ„αž˜αž‚αžΊ αž˜αž·αž“αž–αž·αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αžŸαŸ’αžαžΆαŸ†αž“αžΉαž„αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžŽαž“αžΆαžŠαŸ‚αž›αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž”αž„αŸ’αž€αž”αŸ‹αž“αŸαž™αž€αžΆαžšαž αŸ…αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ‚αž›αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹ system.directory_αž˜αžΆαž“.

αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ†αžŽαŸ‚αž€αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž…αžΆαžšαžŽαžΆ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αžαžΌαž…αž˜αž½αž™αŸ” αž”αžΆαž‘/αž…αžΆαžŸ αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαžŠαŸ„αž™αž€αžΆαžšαž‡αŸ†αž“αž½αžŸ && αžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš && αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž‘αžŸαŸ’αžŸαž“αŸˆαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αžœαžΆαž˜αž·αž“αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹αž’αŸ’αžœαžΈαž“αŸ„αŸ‡αž‘αŸαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž€αžΆαžšαž—αžΆαž“αŸ‹αž…αŸ’αžšαž‘αŸ†αžšαžœαžΆαž„ & αž“αž·αž„ & αž’αžΆαž…αž”αž„αŸ’αž€αž±αŸ’αž™αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžš αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αžŸαŸ’αžαžΆαŸ†αž“αŸƒαž€αž“αŸ’αžŸαŸ„αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αž‘αž»αž€αžŠαŸ„αž™αžαž˜αŸ’αž›αŸƒαž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ/αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αž αž»αžŸαžšαž”αžŸαŸ‹αž™αžΎαž„ αž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαžœαž·αž“αž·αž…αŸ’αž†αŸαž™ V3093, αž˜αžΆαž“αž€αžšαžŽαžΈαž“αŸαŸ‡αŸ–

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

αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ k αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž‘αŸ αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αž”αŸ’αžšαžΎαž’αžΆαžαž»αž’αžΆαžšαŸαŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αž˜αž½αž™αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž…αŸ„αž› 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 αŸ” αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž±αŸ’αž™αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αž”αžΆαžŸαŸ‹αŸ– αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŠαŸ„αž™αž›αŸαž 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 αž“αžΉαž„αžαŸ’αžšαž‘αž”αŸ‹αžαž˜αŸ’αž›αŸƒ αž˜αž·αž“αž–αž·αž. αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸαŸ‡αžαž½αž“αŸƒαžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžαŸ‚αž˜αŸ’αžαž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαŸ’αž‰αž»αŸ†αžαžΆαž”αŸ†αžŽαŸ‚αž€αž“αŸƒαž€αžΌαžŠαž“αŸαŸ‡αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αžΆαž“αž”αŸ†αžŽαž„αŸ”

αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“ 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 αž˜αž·αž“αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž”αžΆαž“αž‘αŸαŸ” αž’αžΆαž—αžΈαžƒαžΈ αžœαž·αž’αžΈαž–αžΈαžšαž”αžΈαž‘αŸ€αžαŸ” αžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαžΆαž„αž›αžΎ αžαŸ’αž‰αž»αŸ†αž’αžΆαž…αž•αŸ’αžαž›αŸ‹αž‡αž˜αŸ’αžšαžΎαžŸαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

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

αž€αŸ†αž αž»αžŸαž…αž˜αŸ’αž›αž„αž”αž·αž‘αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αžΆαž“αž±αž€αžΆαžŸαžαŸ’αž–αžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž†αžΆαž”αŸ‹αŸ— αž¬αž€αŸ’αžšαŸ„αž™αž˜αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž…αŸ’αžšαžΎαž“ αž αžΎαž™αž§αž”αž€αžšαžŽαŸαžŠαŸαž›αŸ’αž’αž”αŸ†αž•αž»αžαž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαž™αž»αž‘αŸ’αž’αž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αž–αž½αž€αžœαžΆαž‚αžΊαž€αžΆαžšαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αžαŸ”

PS αž αžΎαž™αžŠαžΌαž…αžšαžΆαž›αŸ‹αžŠαž„ αž€αŸ†αž αž»αžŸαž“αŸαŸ‡αž‘αŸ†αž“αž„αž‡αžΆαž›αŸαž…αž‘αžΎαž„αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž›αž€αŸ’αžαžαžŽαŸ’αžŒαž–αž αž»αž‡αž½αžš :) αŸ” αžŸαžΌαž˜αž˜αžΎαž›αž€αžΆαžšαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™ "αž₯αž‘αŸ’αž’αž·αž–αž›αž…αž»αž„αž€αŸ’αžšαŸ„αž™".

αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“ N8

αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αŸ– V3095 [CWE-476] αžœαžαŸ’αžαž» '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)
  {
    ....
  }
  ....
}

αž€αŸ†αž αž»αžŸαž”αž»αžšαžΆαžŽαŸ– αžœαžαŸ’αžαž»αž‘αžΈαž˜αž½αž™ αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„ αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž–αž·αž“αž·αžαŸ’αž™ αž‘αž‘αŸ. αž€αžΆαžšαž’αŸ’αžœαžΎαžšαŸ„αž‚αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αž“αŸαŸ‡αž”αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž’αŸ†αž–αžΈαž”αž‰αŸ’αž αžΆαž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž”αž‰αŸ’αž αžΆαž–αžΈαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ– αž‘αžΆαŸ†αž„ αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„ αž˜αž·αž“αžŠαŸ‚αž›αžŸαŸ’αž˜αžΎ αž‘αž‘αŸαžŠαŸ‚αž›αž‚αž½αžšαž±αŸ’αž™αžŸαž„αŸ’αžŸαŸαž™ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‚αžΊαž˜αž·αž“αž’αžΆαž…αžαŸ’αžœαŸ‡αž”αžΆαž“ αž¬αž™αžΎαž„αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž€αŸ†αž αž»αžŸαž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠ αžŠαŸ‚αž›αž‡αžΆαž€αžΆαžšαž”αŸ‰αž»αž“αž”αŸ‰αž„αž…αžΌαž›αž”αŸ’αžšαžΎαž―αž€αžŸαžΆαžšαž™αŸ„αž„αž‘αž»αž€αž‡αžΆαž˜αŸ„αžƒαŸˆαŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αž”αŸ„αŸ‡αž‡αŸ†αž αžΆαž“αžαžΌαž…αž˜αž½αž™αž‘αŸ€αž - αž₯αž‘αžΌαžœαž“αŸαŸ‡αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ PVS-Studio αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž› αž“αž·αž„αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αžαŸ’αž‰αž»αŸ†αž€αŸαž…αž„αŸ‹αž“αž·αž™αžΆαž™αžŠαŸ‚αžšαžαžΆ Chocolatey αž‚αžΊαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸαž›αŸ’αž’αžŠαŸ‚αž›αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αžαžΌαž…αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠ αžŠαŸ‚αž›αž’αžΆαž…αž˜αžΆαž“αžαž·αž…αž‡αžΆαž„αž“αŸαŸ‡αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎ PVS-Studio αŸ”

αž™αžΎαž„αž’αž‰αŸ’αž‡αžΎαž‰αž’αŸ’αž“αž€αŸ” αž‘αžΆαž‰αž™αž€ αž αžΎαž™αžŸαžΆαž€αž›αŸ’αž”αž„ PVS-Studio αŸ” αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž‘αŸ€αž„αž‘αžΆαžαŸ‹αž“αžΌαžœαž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αžαž“αžΉαž„αž’αŸ’αžœαžΎαž’αŸ„αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž“αžΌαžœαž‚αž»αžŽαž—αžΆαž– αž“αž·αž„αž—αžΆαž–αž‡αžΏαž‡αžΆαž€αŸ‹αž“αŸƒαž€αžΌαžŠαžŠαŸ‚αž›αž€αŸ’αžšαž»αž˜αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αž‡αž½αž™αž€αžΆαžšαž–αžΆαžšαž˜αž“αž»αžŸαŸ’αžŸαž‡αžΆαž…αŸ’αžšαžΎαž“ αž—αžΆαž–αž„αžΆαž™αžšαž„αž‚αŸ’αžšαŸ„αŸ‡αžŸαžΌαž“αŸ’αž™αžαŸ’αž„αŸƒ.

PS

αž˜αž»αž“αž–αŸαž›αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž– αž™αžΎαž„αž”αžΆαž“αž•αŸ’αž‰αžΎαž’αžαŸ’αžαž”αž‘αž‘αŸ…αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Chocolatey αž αžΎαž™αž–αž½αž€αž‚αŸαž”αžΆαž“αž‘αž‘αž½αž›αžœαžΆαž™αŸ‰αžΆαž„αž›αŸ’αž’αŸ” αž™αžΎαž„β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αžšαž€β€‹αžƒαžΎαž‰β€‹αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αž›β€‹αžŸαŸ†αžαžΆαž“αŸ‹β€‹αž“αŸ„αŸ‡β€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž‡αžΆβ€‹αž§αž‘αžΆαž αžšαžŽαŸ αž–αž½αž€αž‚αŸβ€‹αž…αžΌαž›αž…αž·αžαŸ’αžβ€‹αž€αŸ†αž αž»αžŸβ€‹αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αž”αžΆαž“β€‹αžšαž€β€‹αžƒαžΎαž‰β€‹αž‘αžΆαž€αŸ‹αž‘αž„β€‹αž“αžΉαž„β€‹αž‚αž“αŸ’αž›αžΉαŸ‡ "api-key"αŸ”

PVS-Studio αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„ ChocolateyαŸ– αž–αž·αž“αž·αžαŸ’αž™ Chocolatey αž–αžΈαž€αŸ’αžšαŸ„αž˜ Azure DevOps

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αž‘αžŸαŸ’αžŸαž“αž·αž€αž‡αž“αžŠαŸ‚αž›αž“αž·αž™αžΆαž™αž—αžΆαžŸαžΆαž’αž„αŸ‹αž‚αŸ’αž›αŸαžŸ αžŸαžΌαž˜αž”αŸ’αžšαžΎαžαŸ†αžŽαž”αž€αž”αŸ’αžšαŸ‚αŸ– Vladislav Stolyarov αŸ” PVS-Studio αž₯αž‘αžΌαžœαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„ Chocolatey: αž–αž·αž“αž·αžαŸ’αž™αžŸαžΌαž€αžΌαž‘αžΆαž“αŸ…αž€αŸ’αžšαŸ„αž˜ Azure DevOps.

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹