PVS-Studio рдЕрдм рдЪреЙрдХрд▓реЗрдЯрд░реА рдореЗрдВ рд╣реИ: Azure DevOps рд╕реЗ рдЪреЙрдХрд▓реЗрдЯ рдХреА рдЬрд╛рдБрдЪ

рдЪрд┐рддреНрд░ 4

рд╣рдо рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдм рдЪреЙрдХрд▓реЗрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд╣реИред рд╣рдорд╛рд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рддреИрдирд╛рддреА рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВред рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рдЪреЙрдХрд▓реЗрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред CI рд╕рд┐рд╕реНрдЯрдо Azure DevOps рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ рдмрд╛рджрд▓ рдПрдХреАрдХрд░рдг рдкрд░ рд╣рдорд╛рд░реЗ рдЕрдиреНрдп рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ:


рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдЬрд╝реНрдпреЛрд░ рджреЗрд╡реЛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдирдХрд▓ рди рд╣реЛред

рддреЛ, рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдирд╛рдпрдХ:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕реЗ рд╕реА, рд╕реА ++, рд╕реА # рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ 32-рдмрд┐рдЯ, 64-рдмрд┐рдЯ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рдПрдЖрд░рдПрдо рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдмрд╛рд░ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрд▓рд░реНрдЯ рдХреИрд╕реЗ рджреЗрдЦреЗрдВ рдФрд░ рдЗрд╕ рдЯреВрд▓ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВред

Azure DevOps- рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣, рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред рдордВрдЪ рдореЗрдВ рдПрдЬрд╝реНрдпреЛрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди, рдПрдЬрд╝реНрдпреЛрд░ рдмреЛрд░реНрдб, рдПрдЬрд╝реНрдпреЛрд░ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ, рдПрдЬрд╝реНрдпреЛрд░ рд░рд┐рдкреЛрдЬрд╝, рдПрдЬрд╝реНрдпреЛрд░ рдЯреЗрд╕реНрдЯ рдкреНрд▓рд╛рди рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреЗрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

Chocolatey рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╡рд┐рдВрдбреЛрдЬ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЕрдкрдбреЗрдЯ рдФрд░ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕реЗ рдкреВрд░реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рд╣реИред

рдЪреЙрдХрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд▓рд┐рдВрдХ рд╕реЗ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП ред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдкрд░ рдкреВрд░реНрдг рдкреНрд░рд▓реЗрдЦрди "рдЪреЙрдХрд▓реЗрдЯ рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрдирд╛" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд▓рд┐рдВрдХ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдореИрдВ рд╡рд╣рд╛рдВ рд╕реЗ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛ред

рдирд╡реАрдирддрдо рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХрдорд╛рди:

choco install pvs-studio

PVS-Studio рдкреИрдХреЗрдЬ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢:

choco install pvs-studio --version=7.05.35617.2075

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдХреЛрд░ рдШрдЯрдХред рдЕрдиреНрдп рд╕рднреА рдЭрдВрдбреЗ (рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди, рдЬрд╛рд╡рд╛рдХреЛрд░, рдЖрдИрдбрд┐рдпрд╛, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) рдХреЛ 'рдкреИрдХреЗрдЬреЗрдЬ-рдкреИрд░рд╛рдореАрдЯрд░реНрд╕' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

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

рдЕрдм рдЖрдЗрдП рдПрдЬрд╝реНрдпреЛрд░ рджреЗрд╡рдУрдкреНрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

рдЕрдиреБрдХреВрд▓рди


рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЦрд╛рддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛, рдПрдХ рдмрд┐рд▓реНрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдирд╛рдирд╛, рдФрд░ рдЧрд┐рдЯрд╣рдм рдкрд░ рднрдВрдбрд╛рд░ рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рддреЗ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реИ ред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдХрд░ рд╣рдорд╛рд░рд╛ рд╕реЗрдЯрдЕрдк рддреБрд░рдВрдд рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЯреНрд░рд┐рдЧрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ :

trigger:
- master

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ-рд╣реЛрд╕реНрдЯреЗрдб рдПрдЬреЗрдВрдЯ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░ 2019 рдФрд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рд╣реЛрдЧрд╛:

pool:
  vmImage: 'windows-latest'

рдЪрд▓реЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ ( рдЪрд░рдг рдмреНрд▓реЙрдХ ) рдХреЗ рд╢рд░реАрд░ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЖрднрд╛рд╕реА рдорд╢реАрди рдореЗрдВ рдордирдорд╛рдирд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ред рд╣рдо Azure DevOps рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ Chocolatey рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ред рдЗрд╕реЗ рдореБрдлрд╝реНрдд рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХреГрдд рд╣реИрдВ, рддреЛ рдмрд╕ рдЕрдкрдирд╛ рдЦрд╛рддрд╛ рдЪреБрдиреЗрдВ, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рд╣реА рдХрд░реЗрдВред

рдЪрд┐рддреНрд░ 2


рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдпрд╣ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╣рд╛рдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ред

рдЪрд┐рддреНрд░ 5


рдПрдХ рд╕рдлрд▓ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рд╕рдВрдЧрдарди рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ :

рдЪрд┐рддреНрд░ 9


рдЕрдм рдЖрдк рдХрд╛рд░реНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЪреЙрдХрд▓реЗрдЯ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм azure-pipelines.yml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ :

рдЪрд┐рддреНрд░ 6


Chocolatey рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЦреЗрддреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрдЦреЗрдВ:

рдЪрд┐рддреНрд░ 7


рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдХрдорд╛рдВрдб рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдореЗрдВ Nuspec рдлрд╝рд╛рдЗрд▓ рдирд╛рдо, рдкреА рд╡реА рдПрд╕ рд╕реНрдЯреВрдбрд┐рдпреЛ - рд╡рд╛рдВрдЫрд┐рдд рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдж рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдореЗрдВ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред рдРрдб рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЧрдард┐рдд рдХрд╛рд░реНрдп рджреЗрдЦреЗрдВред

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

рдЕрдЧрд▓рд╛, рд╣рдорд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ:

- task: CmdLine@2
  inputs:
    script: 

рдЕрдм рд╣рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ PVSNAME рдФрд░ PVSKEY рдЙрди рдЪрд░ рдХреЗ рдирд╛рдо рд╣реИрдВ рдЬрд┐рдирдХреЗ рдореВрд▓реНрдп рд╣рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓реЙрдЧрд┐рди рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрдиреВ рдЪрд░ -> рдирдпрд╛ рдЪрд░ рдЦреЛрд▓реЗрдВ ред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рдФрд░ PVSKEY рдХреЗ рд▓рд┐рдП PVSNAME рдЪрд░ рдмрдирд╛рдПрдВ ред PVSKEY рдХреЗ рд▓рд┐рдП рдЗрд╕ рдорд╛рди рдХреЛ рдЧреБрдкреНрдд рд░рдЦреЗрдВ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ ред рдЯреАрдо рдХреЛрдб:

all "C:\Program Files (x86)\PVS-Studio\PVS-Studio_Cmd.exe" credentials 
тАУu $(PVSNAME) тАУn $(PVSKEY)

рдЪрд▓реЛ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрдбрд╝реА рдмреИрдЯ-рдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ:

all build.bat

рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ рдЬрд╣рд╛рдБ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рдЭреВрда рдмреЛрд▓реЗрдВрдЧреЗ:

all mkdir PVSTestResults

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЪрд▓рд╛рдПрдВ:

all "C:\Program Files (x86)\PVS-Studio\PVS-Studio_Cmd.exe" 
тАУt .\src\chocolatey.sln тАУo .\PVSTestResults\Choco.plog 

рд╣рдо рдЕрдкрдиреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ Plogonverter рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

all "C:\Program Files (x86)\PVS-Studio\PlogConverter.exe" 
тАУt html тАУo \PVSTestResults\ .\PVSTestResults\Choco.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-Studio\PVS-Studio_Cmd.exe" 
      credentials тАУu $(PVSNAME) тАУn $(PVSKEY)
      call build.bat
      call mkdir PVSTestResults
      call "C:\Program Files (x86)\PVS-Studio\PVS-Studio_Cmd.exe" 
      тАУt .\src\chocolatey.sln тАУo .\PVSTestResults\Choco.plog
      call "C:\Program Files (x86)\PVS-Studio\PlogConverter.exe" 
      тАУt html тАУo .\PVSTestResults\ .\PVSTestResults\Choco.plog

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

рдХрд╛рд░реНрдп рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬреЗрдВ-> рд╕рд╣реЗрдЬреЗрдВ-> рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ред рдХрд╛рд░реНрдп рдЯреИрдм рдкрд░ рдЬрд╛рдХрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдЕрдирд▓реЛрдб рдХрд░реЗрдВред

рдЖрдВрдХрдбрд╝рд╛ 8



рдЪреЙрдХрд▓реЗрдЯреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ C # рдХреЛрдб рдХреА рдХреБрд▓ 37,615 рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдорд╛рдиреНрдпрддрд╛ рдкрд░рд┐рдгрд╛рдо


рдЪреЗрддрд╛рд╡рдиреА N1

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3005 'рдкреНрд░рджрд╛рддрд╛' рдЪрд░ рдЦреБрдж рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрд░реЗрдЯрдкреЛрд╣рд╛рд╢рдкреНрд░реЙрдЗрдбрд░рд╕рд╛рдЗрд╕реЗрдкреНрд╕ 38

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

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЦреБрдж рдХреЛ рдПрдХ рдЪрд░ рдХрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдкрд╛рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдЪрд░ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХреБрдЫ рдЕрдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЦреИрд░, рдпрд╛ рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ, рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рдмрд╕ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЪреЗрддрд╛рд╡рдиреА N2

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3093 [CWE-480] 'рдФрд░' рдСрдкрд░реЗрдЯрд░ рджреЛрдиреЛрдВ рдСрдкрд░реЗрдВрдб рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╢рд╛рдпрдж рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ 'рдФрд░&' рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо .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] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд╢реЙрд░реНрдЯрдкреНрд░реЙрдкреНрдЯ' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддреА рд╣реИред рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡рдкреНрд░реЛрдореНрдкреНрдЯреНрд╕ред 101
рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдЪреЗрддрд╛рд╡рдиреА: V3022 [CWE-571] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд╢реЙрд░реНрдЯрдкреНрд░реЙрдкреНрдЯ' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддреА рд╣реИред рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡рдкреНрд░реЙрдкреНрдЯреНрд╕ред 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 рдХреЛ рдКрдкрд░ рдХреА рдХрдИ рд░реЗрдЦрд╛рдУрдВ рдкрд░ рд╢реВрдиреНрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдЧрд▓рдд рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг, рд▓реВрдк рдмреЙрдбреА рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧреАред рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИред

рдЪреЗрддрд╛рд╡рдиреА рдПрди 6

рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдЪреЗрддрд╛рд╡рдиреА: V3022 [CWE-571] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ ' рд╕реНрдерд╛рдкрд┐рддрдкреИрдХреЗрдЬрд╡реЗрд╢рди.рдХрд╛рдЙрдВрдЯ ! = 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);
    }
    ....
  }
  ....
}

рдпрд╣рд╛рдБ рдПрдХ рдЕрдЬреАрдм рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдерд┐рддрд┐ рд╣реИ: рдЗрдВрд╕реНрдЯреЙрд▓рдкреИрдХреЗрдЬ рд╡реАрд░реНрд╕рд┐рдпрди.рдХрд╛рдЙрдВрдЯ ! = 1 , рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрдЧрд╛ ред рдЕрдХреНрд╕рд░, рдЗрд╕ рддрд░рд╣ рдХреА рдЪреЗрддрд╛рд╡рдиреА рдХреЛрдб рдореЗрдВ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИ, рдФрд░ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдмрд╕ рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдВрдЪред

рдЪреЗрддрд╛рд╡рдиреА N7

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3001 рд╕рдорд░реВрдк рдЙрдк рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд░ рд░рд╣реЗ рд╣реИрдВ 'commandArguments.contains ( "- apikey")' рдмрд╛рдИрдВ рдУрд░ рдФрд░ '||' рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ред рддрд░реНрдХ

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

рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдСрдлрд╝ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрд╛ рдерд╛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдВрддрд┐рдо рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рднреВрд▓ рдЧрдПред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдЪреЙрдХрд▓реЗрдЯреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдПрдХ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдПрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреА рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдорд╛рди, рдореИрдВ рдРрд╕реЗ рд╡рд┐рдХрд▓реНрдк рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

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

рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрдирд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реИред

PS рдФрд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдпрд╣ рддреНрд░реБрдЯрд┐ рдПрдХ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ :)ред рдкреНрд░рдХрд╛рд╢рди " рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХрд╛ рдкреНрд░рднрд╛рд╡ " рджреЗрдЦреЗрдВ ред

рдЪреЗрддрд╛рд╡рдиреА N8

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3095 [CWE-476] рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ ' рдЗрдВрд╕реНрдЯреЙрд▓рдкреИрдХреЗрдЬ ' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 910, 917. рдирдЧреЗрдЯрд╕реЗрд╡рд╛ред 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 рдЕрдм рдЪреЙрдХрд▓реЗрдЯ рдореЗрдВ рд╣реИ: Azure DevOps рдХреЗ рддрд╣рдд рдЪреЙрдХрд▓реЗрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ ред

All Articles