рдпрд╣ рдПрдХ рджреВрд╕рд░рд╛ рд▓реЗрдЦ рд╣реИ, рдЬреЛ рдХреНрд▓рд╛рдЙрдб рд╕реАрдЖрдИ-рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдЗрд╕ рдмрд╛рд░ рд╣рдо рдордВрдЪ Azure DevOps - Microsoft рд╕реЗ рдХреНрд▓рд╛рдЙрдб CI \ CD рд╕рдорд╛рдзрд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдо ShareX рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
рд╣рдореЗрдВ рддреАрди рдШрдЯрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдкрд╣рд▓рд╛ PVS-Studio рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИред рджреВрд╕рд░рд╛ Azure DevOps рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░реЗрдВрдЧреЗред рддреАрд╕рд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪреЗрдВрдЧреЗред рддреЛ рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рджреЛрд╖реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИред рдЙрдкрдХрд░рдг рд╕реА, рд╕реА ++ рдФрд░ рд╕реА # рдХреЛрдб рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
Azure DevOps ред Azure DevOps рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ Azure Pipeline, Azure Board, Azure Artifacts рдФрд░ рдЕрдиреНрдп рдРрд╕реЗ рдЙрдкрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
ShareX рдПрдХ рдореБрдлреНрдд рдРрдк рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдХреНрд░реАрди рдХреЗ рдХрд┐рд╕реА рднреА рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдХреИрдкреНрдЪрд░ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ C # рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ рдФрд░ рдпрд╣ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЛрд░реНрд╕ рдХреЛрдб
GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред
ShareX рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХреНрд▓реЙрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ:
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдХрд╛рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЪрд▓реЛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
Azure DevOps рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП
рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг
рдХрд░реЗрдВ рдФрд░ "GitHub рдХреЗ рд╕рд╛рде рдореБрдлрд╝реНрдд рд╢реБрд░реВ рдХрд░реЗрдВ" рджрдмрд╛рдПрдВред
Microsoft рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ GitHub рдЦрд╛рддреЗ рдХреЗ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
рдЕрдкрдирд╛ рдкрдВрдЬреАрдХрд░рдг рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ Microsoft рдЦрд╛рддрд╛ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ:
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ "рдкрд╛рдЗрдкрд▓рд╛рдЗрди" - "рдмрд┐рд▓реНрдб" рдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдПрдХ рдирдпрд╛ рдмрд┐рд▓реНрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рдкрд░ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреЛрдб рдХрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИ, рд╣рдо рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗ - GitHubред
Azure рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░реЗрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЪреБрдиреЗрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╕реНрдЯреЗрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд░рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗред
рдЯреЗрдореНрдкрд▓реЗрдЯ рдЪрдпрди рд╡рд┐рдВрдбреЛ рдореЗрдВ, "рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди" рдЪреБрдиреЗрдВред
рд╣рдо Microsoft рдХреЗ рд╣реЛрд╕реНрдЯреЗрдб рдпрд╛ рд╕реЗрд▓реНрдл-рд╣реЛрд╕реНрдЯреЗрдб рдПрдЬреЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрдереИрддрд┐рдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо Microsoft рджреНрд╡рд╛рд░рд╛ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдПрдЬреЗрдВрдЯреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдРрд╕реЗ рдПрдЬреЗрдВрдЯ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЬрдм рд╣рдо рдЕрдкрдиреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рд▓реЙрдиреНрдЪ рд╣реЛрддреЗ рд╣реИрдВред рдЯрд╛рд╕реНрдХ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реЗ рдПрдЬреЗрдВрдЯреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдореЗрдВ рдЙрдирдХреЗ рд╕рдорд░реНрдерди рдФрд░ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдЬреЛ рдХрд┐ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЪрд▓реЛ Microsoft рджреНрд╡рд╛рд░рд╛ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдПрдЬреЗрдВрдЯреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рдП рдЧрдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрджрд▓ рджреЗрдВ:
# Setting up run triggers # Run only for changes in the master branch trigger: - master # Since the installation of random software in virtual machines # is prohibited, we'll use a Docker container, # launched on a virtual machine with Windows Server 1803 pool: vmImage: 'win1803' container: microsoft/dotnet-framework:4.7.2-sdk-windowsservercore-1803 steps: # Download the analyzer distribution - task: PowerShell@2 inputs: targetType: 'inline' script: 'Invoke-WebRequest -Uri https://files.viva64.com/PVS-Studio_setup.exe -OutFile PVS-Studio_setup.exe' - task: CmdLine@2 inputs: workingDirectory: $(System.DefaultWorkingDirectory) script: | # Restore the project and download dependencies nuget restore .\ShareX.sln # Create the directory, where files with analyzer reports will be saved md .\PVSTestResults # Install the analyzer PVS-Studio_setup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /COMPONENTS=Core # Create the file with configuration and license information "C:\Program Files (x86)\PVS-Studio\PVS-Studio_Cmd.exe" credentials -u $(PVS_USERNAME) -n $(PVS_KEY) # Run the static analyzer and convert the report in html. "C:\Program Files (x86)\PVS-Studio\PVS-Studio_Cmd.exe" -t .\ShareX.sln -o .\PVSTestResults\ShareX.plog "C:\Program Files (x86)\PVS-Studio\PlogConverter.exe" -t html -o .\PVSTestResults\ .\PVSTestResults\ShareX.plog # Save analyzer reports - task: PublishBuildArtifacts@1 inputs: pathToPublish: PVSTestResults artifactName: PVSTestResults
рдиреЛрдЯ: рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреА рдЫрд╡рд┐ рдореЗрдВ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХрдВрдЯреЗрдирд░ рд╣рд░ рдмрд╛рд░ рдХрд╛рд░реНрдп рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордпред
рдЪрд▓реЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЪрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рдВрдкрд╛рджрд┐рдд рд╡рд┐рдВрдбреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ "рдЪрд░" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдлрд┐рд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рд╡рд╛рд▓реЗ рджреЛ рдЪрд░ -
PVS_USERNAME рдФрд░
PVS_KEY рдЬреЛрдбрд╝реЗрдВред
PVS_KEY рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рддреЗ рд╕рдордп 2048-рдмрд┐рдЯ RSA рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рди рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдФрд░ рдХрд╛рд░реНрдп рдкреНрд░рджрд░реНрд╢рди рд▓реЙрдЧ рдореЗрдВ рд╡реИрд░рд┐рдПрдмрд▓ рдорд╛рди рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рдЗрд╕ рдорд╛рди рдХреЛ рдЧреБрдкреНрдд рд░рдЦреЗрдВ" рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред
"рд░рди" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЪрд░реЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд▓рд╛рдПрдВред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк - рдПрдХ рд╕реНрд╡-рд╣реЛрд╕реНрдЯреЗрдб рдПрдЬреЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рдо рд╕реНрд╡-рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдПрдЬреЗрдВрдЯреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ рдПрдЬреЗрдВрдЯ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдзрд┐рдХ рдЕрд╡рд╕рд░ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рдж рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдРрд╕реЗ рдПрдЬреЗрдВрдЯреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ
рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕реНрд╡рдпрдВ-рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдПрдЬреЗрдВрдЯ рдкрд░ рдХрд╛рд░реНрдп рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реБрдЭрд╛рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдирд┐рдореНрди рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрдВрдЧреЗ:
# Setting up triggers # Run the analysis for master-branch trigger: - master # The task is run on a self-hosted agent from the pool 'MyPool' pool: 'MyPool' steps: - task: CmdLine@2 inputs: workingDirectory: $(System.DefaultWorkingDirectory) script: | # Restore the project and download dependencies nuget restore .\ShareX.sln # Create the directory where files with analyzer reports will be saved md .\PVSTestResults # Run the static analyzer and convert the report in html. "C:\Program Files (x86)\PVS-Studio\PVS-Studio_Cmd.exe" -t .\ShareX.sln -o .\PVSTestResults\ShareX.plog "C:\Program Files (x86)\PVS-Studio\PlogConverter.exe" -t html -o .\PVSTestResults\ .\PVSTestResults\ShareX.plog # Save analyzer reports - task: PublishBuildArtifacts@1 inputs: pathToPublish: PVSTestResults artifactName: PVSTestResults
рдПрдХ рдмрд╛рд░ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк "рд╕рд╛рд░рд╛рдВрд╢" рдЯреИрдм рдХреЗ рддрд╣рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди
рднреЗрдЬреЗрдВ рдореЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдИрдореЗрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпрд╛
рдорд╛рд░реНрдХреЗрдЯрдкреНрд▓реЗрд╕ рдкрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЯреВрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо
рдЕрдм рдЖрдЗрдП рджреЗрдЦреЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ ShareX рдореЗрдВ рдкрд╛рдП рдЧрдП рдХреБрдЫ рдХреАрдбрд╝реЗред
рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдБрдЪрд╡рд╛рд░реНрдо рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдХреЛрдб рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рдЦрд╛рдорд┐рдпреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдирд┐рд░рд░реНрдердХ рдЬрд╛рдБрдЪреЛрдВ рдХреЗ рд╕рд╛рде:
private void PbThumbnail_MouseMove(object sender, MouseEventArgs e) { .... IDataObject dataObject = new DataObject(DataFormats.FileDrop, new string[] { Task.Info.FilePath }); if (dataObject != null) { Program.MainForm.AllowDrop = false; dragBoxFromMouseDown = Rectangle.Empty; pbThumbnail.DoDragDrop(dataObject, DragDropEffects.Copy | DragDropEffects.Move); Program.MainForm.AllowDrop = true; } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3022 [CWE-571] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'dataObject! = Null' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред рдЯрд╛рд╕реНрдХрдердВрдмрдиреЗрд▓рдкреЗрд▓ .cs 415
рдЪрд▓реЛ
null рдХреЗ рд▓рд┐рдП
dataObject рдЪрд░ рдХреА рдЬрд╛рдВрдЪ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИ?
dataObject рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ
рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБ рдкрд░ рдПрдХ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдВрдЪ рд╣реИред рдХреНрд░рд┐рдЯрд┐рдХрд▓? рдирд╣реАрдВред рд░рд╕реАрд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ? рдирд╣реАрдВред рдпрд╣ рдЬрд╛рдВрдЪ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдб рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЖрдЗрдП рдХреЛрдб рдХреЗ рдПрдХ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
private static Image GetDIBImage(MemoryStream ms) { .... try { .... return new Bitmap(bmp); .... } finally { if (gcHandle != IntPtr.Zero) { GCHandle.FromIntPtr(gcHandle).Free(); } } .... } private static Image GetImageAlternative() { .... using (MemoryStream ms = dataObject.GetData(format) as MemoryStream) { if (ms != null) { try { Image img = GetDIBImage(ms); if (img != null) { return img; } } catch (Exception e) { DebugHelper.WriteException(e); } } } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3022 [CWE-571] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'img! = Null' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддреА рд╣реИред рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рд╣реЗрд▓реНрдкрд░реНрд╕ред 289
GetImageAlternative рдореЗрдердб рдореЗрдВ,
img рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐
рдмрд┐рдЯрдореИрдк рдХреНрд▓рд╛рд╕ рдХреЗ рдПрдХ рдирдП рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо
img рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп
GetDIBImage рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб рд▓реЗрдЦрдХ рдХрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рдХреЗрд╡рд▓ рдмреНрд▓реЙрдХ рдХреА
рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░
рдЕрдВрдд рдореЗрдВ ,
рдХреИрдЪ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреЙрд▓рд░ рд╡рд┐рдзрд┐
GetImageAlternative рдХреЛ
рдмрд┐рдЯрдореИрдк рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдкрд╡рд╛рдж рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ
рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
img рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдереНрд░реЗрдб рднреА
img рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗрдЧрд╛
! = рдирд▓ рдЪреЗрдХ рд▓реЗрдХрд┐рди рдкрдХрдбрд╝ рдмреНрд▓реЙрдХ рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛ред рдирддреАрдЬрддрди, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдВрдЪ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛ред
рдЖрдЗрдП рдПрдХ
V3022 рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
private void btnCopyLink_Click(object sender, EventArgs e) { .... if (lvClipboardFormats.SelectedItems.Count == 0) { url = lvClipboardFormats.Items[0].SubItems[1].Text; } else if (lvClipboardFormats.SelectedItems.Count > 0) { url = lvClipboardFormats.SelectedItems[0].SubItems[1].Text; } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3022 [CWE-571] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'lvClipboardFormats.SelectedItems.Count> 0' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред AfterUploadForm.cs 155
рдЖрдЗрдП рджреВрд╕рд░реА рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рд╡рд╣рд╛рдВ рд╣рдо рд░реАрдб-рдУрдирд▓реА
рдХрд╛рдЙрдВрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЧреБрдг рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрджрд┐
рдХрд╛рдЙрдВрдЯ рдЧреБрдг рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╕реНрдерд┐рддрд┐ рдХреЗрд╡рд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕рдм рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╛рд╣рд░реА рдореЗрдВ
рдпрджрд┐ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ
рдХрд╛рдЙрдВрдЯ 0. рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд┐рд▓реЗрдХреНрдЯ
рдЗрдЯрдЗрдореНрд╕ рдХрд▓реЗрдХреНрд╢рди рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╢реВрдиреНрдп рд╕реЗ рдХрдо рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП,
рдХрд╛рдЙрдВрдЯ 0. рдХреЗ рдмрд░рд╛рдмрд░ рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ 0 рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ
рд╣реА рдХрд╛рдЙрдВрдЯ рдЪреЗрдХ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдЧрд▓рдд рдерд╛, рджреВрд╕рд░реА рдмреНрд░рд╛рдВрдЪ рдореЗрдВ рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░
рдХрд╛рдЙрдВрдЯ рдЪреЗрдХ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
V3022 рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреБрдХрдбрд╝рд╛ рд╣реЛрдЧрд╛:
private void DrawCursorGraphics(Graphics g) { .... int cursorOffsetX = 10, cursorOffsetY = 10, itemGap = 10, itemCount = 0; Size totalSize = Size.Empty; int magnifierPosition = 0; Bitmap magnifier = null; if (Options.ShowMagnifier) { if (itemCount > 0) totalSize.Height += itemGap; .... } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдЖрдЗрдЯрдордХрд╛рдЙрдВрдЯ> 0' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИред рд░реАрдЬрдиреНрд╕рдХреИрдкреНрдЯреНрдпреЛрд░рдлреЙрд░реНрдо .cs 1100
рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдиреЗ рджреЗрдЦрд╛ рдХрд┐
рдЖрдЗрдЯрдо рдЖрдЗрдЯрдо> 0 рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐
рдЖрдЗрдЯрдордХрд╛рдЙрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрд╕реА рд╕рдордп рд╢реВрдиреНрдп рд╕реЗ рдКрдкрд░ рд╣реИред рдЗрд╕ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣реАрдВ рднреА рдмрд╣реБрдд рд╢рд░реНрдд рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА рдерд╛, рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИред
рдЕрдЪреНрдЫрд╛, рдЪрд▓реЛ рдЕрдм рдХреБрдЫ рд╕рдЪ рдореЗрдВ рджреЗрдЦреЛред
рдмрдЧ рдХреЛ рд╕рдордЭрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдПрдХ рдмрдЧ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рд╣реИрдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐ рдкрд╛рдИ рдЧрдИ рдереА:
public static void Pixelate(Bitmap bmp, int pixelSize) { .... float r = 0, g = 0, b = 0, a = 0; float weightedCount = 0; for (int y2 = y; y2 < yLimit; y2++) { for (int x2 = x; x2 < xLimit; x2++) { ColorBgra color = unsafeBitmap.GetPixel(x2, y2); float pixelWeight = color.Alpha / 255; r += color.Red * pixelWeight; g += color.Green * pixelWeight; b += color.Blue * pixelWeight; a += color.Alpha * pixelWeight; weightedCount += pixelWeight; } } .... ColorBgra averageColor = new ColorBgra((byte)(b / weightedCount), (byte)(g / weightedCount), (byte)(r / weightedCount), (byte)(a / pixelCount)); .... }
рдореИрдВ рд╕рднреА рдХрд╛рд░реНрдб рджрд┐рдЦрд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдХреНрдпрд╛ рдкрд╛рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд░рдЦ рджреЗрдВред
рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рд╕реЗ, рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ - рдЖрдк рдЗрд╕реЗ рдПрдХ рдЫрд╡рд┐ рдпрд╛ рдПрдХ рдЫрд╡рд┐ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЗрд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдб рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрджреНрдзреГрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрд╕рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕рдордЭрд╛рдиреЗ рдФрд░ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдмрдЧ рдвреВрдВрдврдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред
рдпрд╣ рд╡рд┐рдзрд┐ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ:
рдмрд┐рдЯрдореИрдк рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░
рдЕрдВрддрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп рдЬреЛ
рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
1) рдкреНрд░рд╛рдкреНрдд рдЫрд╡рд┐ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рдкрдХреНрд╖ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд┐рдХреНрд╕реЗрд▓ рдЖрдХрд╛рд░ 15 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ 15x15 = 225 рдкрд┐рдХреНрд╕реЗрд▓ рд╣реЛрдВрдЧреЗред
2) рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ
рдкреАрдЫреЗ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдордзреНрдпрд╡рд░реНрддреА рдЪрд░ рдореЗрдВ
рд░реЗрдб ,
рдЧреНрд░реАрди ,
рдмреНрд▓реВ рдФрд░
рдЕрд▓реНрдлрд╛ рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдмрдВрдзрд┐рдд рд░рдВрдЧ рдФрд░ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ
рдкрд┐рдХреНрд╕реЗрд▓ рд╡рд╛рдЗрдЯ рд╡реИрд░рд┐рдПрдмрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред 255 рд╕реЗ
рдЕрд▓реНрдлрд╛ рдорд╛рди рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ (
рдЕрд▓реНрдлрд╛ рдЪрд░
рдмрд╛рдЗрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм
рдкрд┐рдХреНрд╕реЗрд░реНрд╕рд┐рдВрдЧ рдкрд┐рдХреНрд╕рд▓реНрд╕ рд╣рдо рд╡реИрд▓реНрдпреВ рдХреЛ
рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдкрд┐рдХреНрд╕рд▓
рд╡рд╛рдЗрдЯ рдХреЛ
рд╡реЗрдЯреЗрдбрдХрд╛рдЙрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
ColorBgra color = unsafeBitmap.GetPixel(x2, y2); float pixelWeight = color.Alpha / 255; r += color.Red * pixelWeight; g += color.Green * pixelWeight; b += color.Blue * pixelWeight; a += color.Alpha * pixelWeight; weightedCount += pixelWeight;
рд╡реИрд╕реЗ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐
рдЕрд▓реНрдлрд╛ рдЪрд░ рдХрд╛ рдорд╛рди рд╢реВрдиреНрдп рд╣реИ, рддреЛ
рдкрд┐рдХреНрд╕реЗрд▓ рд╡рд╛рдЗрдЯ рдЗрд╕ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдорд╛рди рдХреЛ
рднрд╛рд░рд┐рддрдХрд╛рдЙрдВрдЯ рдЪрд░ рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдЧрд╛ред рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
3) рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рдореЗрдВ рд╕рднреА рдкрд┐рдХреНрд╕рд▓ рдХреЛ рдЯреНрд░реИрд╡рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп "рдФрд╕рдд" рд░рдВрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
ColorBgra averageColor = new ColorBgra((byte)(b / weightedCount), (byte)(g / weightedCount), (byte)(r / weightedCount), (byte)(a / pixelCount));
4) рдЕрдм рдЬрдм рд╣рдордиреЗ рдЕрдВрддрд┐рдо рд░рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ
рдФрд╕рддрди рдЪрд░ рдореЗрдВ рд▓рд┐рдЦрд╛, рддреЛ рд╣рдо рдлрд┐рд░ рд╕реЗ рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдкрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ
рдФрд╕рдд рд░рдВрдЧ рд╕реЗ рдорд╛рди
рджреЗ рд╕рдХрддреЗ рд╣реИрдВ ред
5) рдмрд┐рдВрджреБ 2 рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд┐рдирд╛ рдЦрдВрдб рдХреЗ рд╣реИрдВред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░,
рднрд╛рд░рд┐рддрдХрд╛рдЙрдВрдЯ рдЪрд░ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рд╕рднреА рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрд┐рд╕реА рдЪрд┐рддреНрд░ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рдкрд┐рдХреНрд╕реЗрд▓ (рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди) рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдкрд┐рдХреНрд╕реЗрд▓ (
0/255 = 0) рдХреЗ рд▓рд┐рдП
рдкрд┐рдХреНрд╕реЗрд▓рд╡реЗрдЕрд░ рдЪрд░ рд╢реВрдиреНрдп рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдкрд┐рдХреНрд╕реЗрд▓
рднрд╛рд░рд┐рддрдХрд╛рдЙрдВрдЯ рдЪрд░ рдХреЗ рдЧрдарди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХрд╛рдлреА рддрд╛рд░реНрдХрд┐рдХ рд╣реИ - рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рддреЛ рдпрд╣ рд╕рдм рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ - рдкрд┐рдХреНрд╕реЗрд▓реЗрд╢рди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЙрди рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рдЬрд┐рдирдореЗрдВ 255 рд╕реЗ рдиреАрдЪреЗ рдХреЗ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдкрд┐рдХреНрд╕реЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рд╢реВрдиреНрдп рд╕реЗ рдЕрд╕рдорд╛рди рд╣реИрдВред рдиреАрдЪреЗ рджреА рдЧрдИ рдкрд┐рдХреНрд╕реЗрд▓реЗрдЯреЗрдб рддрд╕реНрд╡реАрд░ рджреЗрдЦреЗрдВ:
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкрд┐рдХреНрд╕реЗрд▓реЗрд╢рди рджреЗрдЦрд╛ рд╣реИ? рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ред рдареАрдХ рд╣реИ, рдЕрдм рдЗрд╕ рдЫреЛрдЯреЗ рд╕рд╛рдЬрд╝рд┐рд╢ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдмрдЧ рдХрд╣рд╛рдБ рдЫрд┐рдкрд╛ рд╣реИред рддреНрд░реБрдЯрд┐
рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЪрд░ рд╡реИрд░рд┐рдПрдмрд▓ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рди рдХреА рд░реЗрдЦрд╛ рдореЗрдВ
рд╣реЛрддреА рд╣реИ:
float pixelWeight = color.Alpha / 255;
рдЗрд╕ рддрдереНрдп рдХреЗ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм
PixWeight рдЪрд░ рдХреЛ
рдлреНрд▓реЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рд▓реЗрдЦрдХ рдиреЗ рдирд┐рд╣рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдЬрдм
рдЕрд▓реНрдлрд╛ рдлрд╝реАрд▓реНрдб рдХреЛ 255 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдЙрд╕реЗ рд╢реВрдиреНрдп рдФрд░ рдПрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдВрд╢рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдВ рдорд┐рд▓реЗрдВрдЧреАред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдЫрд┐рдкрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
рдЕрд▓реНрдлрд╛ рдЪрд░
рдмрд╛рдЗрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред рдЬрдм рдЗрд╕реЗ 255 рд╕реЗ рдШрдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕реЗ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ
рдлреНрд▓реЛрдЯ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ рдЦреЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдХреБрдЫ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдХреНрдпреЛрдВ рд╣реИред рдЪреВрдБрдХрд┐ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЗ рдЗрди рдкрд┐рдХреНрд╕реЗрд▓ рдорд╛рдиреЛрдВ рдХреА рд╕реАрдорд╛ 0 <рдЕрд▓реНрдлрд╛ <255 рд╣реИ, 255 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд
рдЕрд▓реНрдлрд╛ рдЪрд░ рд╣рдореЗрд╢рд╛ 0 рдореЗрдВ
рдкрд░рд┐рдгрд╛рдорд┐рдд рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЪрд░ рдХреЗ рдорд╛рдиреЛрдВ рдореЗрдВ
PixWeight ,
r ,
g ,
b ,
a ,
рднрд╛рд░рд┐рддрдХрд╛рдЙрдВрдЯ рднреА рд╣реЛрдЧрд╛ рд╣рдореЗрд╢рд╛ 0. рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░рд╛
рдФрд╕рдд рдЪреИрдирд▓ рд╕рднреА рдЪреИрдирд▓реЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛: рд▓рд╛рд▓ - 0, рдиреАрд▓рд╛ - 0, рд╣рд░рд╛ - 0, рдЕрд▓реНрдлрд╛ - 0. рдЗрд╕ рд░рдВрдЧ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдХреЗ, рд╣рдо рдореВрд▓ рд░рдВрдЧ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд░реВрдк рдореЗрдВ,
рдФрд╕рддрдирдЬрд░ рдмрд┐рд▓реНрдХреБрд▓ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЗрд╡рд▓
рдЕрд▓реНрдлрд╛ рдлрд╝реАрд▓реНрдб рдХреЛ
рдлреНрд▓реЛрдЯ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред рдХреЛрдб рд▓рд╛рдЗрди рдХрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
float pixelWeight = (float)color.Alpha / 255;
рдЦреИрд░, рдЧрд▓рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рдВрджреЗрд╢ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реБрдП рдЙрдЪреНрдЪ рд╕рдордп рд╣реИ:
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3041 [CWE-682] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ 'int' рдкреНрд░рдХрд╛рд░ рд╕реЗ 'рдлреНрд▓реЛрдЯ' рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдбрдмрд▓ рдП = (рдбрдмрд▓) (рдПрдХреНрд╕) / рд╡рд╛рдИ ;; ImageHelpers.cs 1119
рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рд╡рд╛рд▓реА рдЫрд╡рд┐ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЙрджреНрдзреГрдд рдХрд░реЗрдВ:
рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceException public static bool AddMetadata(Image img, int id, string text) { .... pi.Value = bytesText; if (pi != null) { img.SetPropertyItem(pi); return true; } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3095 [CWE-476] рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'pi' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 801, 803. ImageHelpers.cs 801
рдЗрд╕ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рдХреЛ рдЙрдореНрдореАрдж рдереА рдХрд┐
рдкрд╛рдИ рдЪрд░
рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реАрд▓рд┐рдП
рд╕реЗрдЯрд░рдкреНрд░реЛрдкрд░реЗрдЯреАрдо рдирд╛рдордХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЪреЗрдХ
рдкрд╛рдИ! = рдЕрд╢рдХреНрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдЗрд╕ рдЪреЗрдХ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕рд░рдгреА рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐
рдкреАрдЖрдИ рд╢реВрдиреНрдп рд╣реИ , рддреЛ
NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджреВрд╕рд░реА рдЬрдЧрд╣ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ:
private static void Task_TaskCompleted(WorkerTask task) { .... task.KeepImage = false; if (task != null) { if (task.RequestSettingUpdate) { Program.MainForm.UpdateCheckStates(); } .... } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3095 [CWE-476] рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдХрд╛рд░реНрдп' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 268, 270. рдЯрд╛рд╕реНрдХрдореИрдирдПрдЧрд░ редcs 268
PVS-Studio рдХреЛ рдПрдХ рдФрд░ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред рдмрд┐рдВрджреБ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрдиреЗ рдХреА рдХреЛрдИ рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рдВрджреЗрд╢ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3095 [CWE-476] рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'Config.PhotobucketAccountInfo' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 216, 219. рдЕрдкрд▓реЛрдбрд░реНрд╕рдХреЙрдиреНрдлрд┐рдЧрдлреЙрд░реНрдо .cs 216
рд╡рд╣реА рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпWindowsList рд╡рд░реНрдЧ рдХреА
EvalWindows рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛, рдЬреЛ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ
рд╕рд╣реА рд╣реИ:
public class WindowsList { public List<IntPtr> IgnoreWindows { get; set; } .... public WindowsList() { IgnoreWindows = new List<IntPtr>(); } public WindowsList(IntPtr ignoreWindow) : this() { IgnoreWindows.Add(ignoreWindow); } .... private bool EvalWindows(IntPtr hWnd, IntPtr lParam) { if (IgnoreWindows.Any(window => hWnd == window)) { return true;
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3009 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ 'рд╕рдорд╛рди' рдорд╛рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдХрд░рддреА рд╣реИред WindowsList.cs 82
рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░
IgnoreWindows рдирд╛рдо рдХреА рд╕реВрдЪреА рдореЗрдВ
hWnd рдХреЗ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪрдХ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдХреЛ
рдЧрд▓рдд рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛
WindowsList (IntPtr ignWindow) рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдпрд╛ рд╕реАрдзреЗ рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдЗрдЧреНрдиреЛрд░рд╡реВрдб рд╕реВрдЪреА рдХреЛ рднрд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реИрд╕реЗ рднреА, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреЛрдб рдореЗрдВ рдлрд┐рд▓рд╣рд╛рд▓ рдпрд╣ рд╕реВрдЪреА рдирд╣реАрдВ рднрд░реА рдЧрдИ рд╣реИред рдпрд╣ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдПрдХ рдФрд░ рд╡рд┐рдЪрд┐рддреНрд░ рд╕реНрдерд╛рди рд╣реИред
рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЙрд▓ protected void OnNewsLoaded() { if (NewsLoaded != null) { NewsLoaded(this, EventArgs.Empty); } }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3083 [CWE-367] рдЗрд╡реЗрдВрдЯ 'NewsLoaded' рдХрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЖрдордВрддреНрд░рдг, NullReferenceException рд╕рдВрднрд╡ рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдШрдЯрдирд╛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред NewsListControl.cs 111
рдпрд╣рд╛рдБ рдПрдХ рдмрд╣реБрдд рдмреБрд░рд╛ рдорд╛рдорд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрд╢рдХреНрдд рдХреЗ рд▓рд┐рдП
NewsLoaded рдЪрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рдзрд┐, рдЬреЛ рдХрд┐рд╕реА рдИрд╡реЗрдВрдЯ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдЕрдиреНрдп рдереНрд░реЗрдб рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрдм рддрдХ рд╣рдо if рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ, рддрдм рддрдХ рд╡реИрд░рд┐рдПрдмрд▓
NewsLoaded рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
NullReferenceException рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рдЗрд╡реЗрдВрдЯ рд╕реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
NewsLoaded , рдЬреЛ рдЕрд╢рдХреНрдд рд╣реИред рдпрд╣ рдПрдХ рдЕрд╢рдХреНрдд рд╕рдВрдЪрд╛рд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдФрд░ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
protected void OnNewsLoaded() { NewsLoaded?.Invoke(this, EventArgs.Empty); }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ
68 рд╕рдорд╛рди рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛ред рд╣рдо рдЙрди рд╕рднреА рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ - рд╡реЗ рд╕рднреА рдПрдХ рд╕рдорд╛рди рдХреЙрд▓ рдкреИрдЯрд░реНрди рд╣реИрдВред
ToString рд╕реЗ рдЕрд╢рдХреНрдд рд▓реМрдЯреЗрдВрд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕рд╣рдХрд░реНрдореА рдХреЗ рдПрдХ
рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ Microsoft рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐
ToString рд╕реЗ рдЕрд╢рдХреНрдд рд▓реМрдЯрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЗрд╕рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╡рд╛рдХрд┐рдл рд╣реИ:
public override string ToString() { lock (loggerLock) { if (sbMessages != null && sbMessages.Length > 0) { return sbMessages.ToString(); } return null; } }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3108 рдпрд╣ 'ToSting ()' рд╡рд┐рдзрд┐ рд╕реЗ 'null' рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ред 167
рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдХреНрдпреЛрдВ рд╕реМрдВрдкрд╛? public SeafileCheckAccInfoResponse GetAccountInfo() { string url = URLHelpers.FixPrefix(APIURL); url = URLHelpers.CombineURL(APIURL, "account/info/?format=json"); .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3008 'url' рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 197, 196. рд╕реАрдлрд╛рдЗрд▓ред 197
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм
url рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕реЗ рдПрдХ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ
FixPrefix рд╡рд┐рдзрд┐ рд╕реЗ рд▓реМрдЯрд╛ рд╣реИред рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЛ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рднреА рд╕рд╛рдл рдХрд░ рджреЗрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдореГрдд рдХреЛрдб рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ: рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд╛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ 9 рдФрд░ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХ рд╕рдорд╛рди рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рджреЛ рддрд░реАрдХреЛрдВ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрдВрдЧреЗ:
public bool CheckAuthToken() { string url = URLHelpers.FixPrefix(APIURL); url = URLHelpers.CombineURL(APIURL, "auth/ping/?format=json"); .... } .... public bool CheckAPIURL() { string url = URLHelpers.FixPrefix(APIURL); url = URLHelpers.CombineURL(APIURL, "ping/?format=json"); .... }
рдирд┐рд╖реНрдХрд░реНрд╖
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрд╡рдд: рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрдХреЛрдВ рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬрдЯрд┐рд▓рддрд╛ рдХрд┐рд╕реА рдЪреБрдиреЗ рд╣реБрдП CI- рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ 15 рдорд┐рдирдЯ рдФрд░ рдХрдИ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХреНрд╕ рд▓рдЧреЗред
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред