рдпрд╣ рд▓реЗрдЦ рдХреНрд▓рд╛рдЙрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЙрд╕ рддрд░реАрдХреЗ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ GitLab CI рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ GitLab Inc. рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдЙрддреНрдкрд╛рдж рд╣реИред рдПрдХ CI рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдЯреЗрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд░ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдареАрдХ рдмрд╛рдж рдмрдЧреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрдЧреНрд╕ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ рд╣реИред
рдХреНрд▓рд╛рдЙрдб рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдкрд░ рд╣рдорд╛рд░реЗ рдЕрдиреНрдп рд▓реЗрдЦреЛрдВ рдХреА рд╕реВрдЪреА:
рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА
GitLab рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реЗрд╡рд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдХреЗ, рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдФрд░ рдЗрд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕реАрдзреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕реЗ рд╕реА, рд╕реА ++, рд╕реА # рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ 32-рдмрд┐рдЯ, 64-рдмрд┐рдЯ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рдПрдЖрд░рдПрдо рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕
рд▓реЗрдЦ рдХреЛ рдкрдврд╝реЗрдВ рдХрд┐ рдХреИрд╕реЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рджреЗрдЦреЗрдВ рдФрд░ рдЙрдкрдХрд░рдг рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВред
OBS рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдУрдкрди рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдФрд░ рдЦреБрд▓рд╛ рд╕реЗрдЯ рд╣реИред рдУрдмреАрдПрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рд╕реНрд░реЛрдд рдЕрд╡рд░реЛрдзрди, рджреГрд╢реНрдп рд╕рдВрд░рдЪрдирд╛, рдбрд┐рдХреЛрдбрд┐рдВрдЧ, рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рдкреНрд░рд╕рд╛рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдХреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд░рд┐рдпрд▓ рдЯрд╛рдЗрдо рдореИрд╕реЗрдЬрд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрд░рдЯреАрдПрдордкреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╕реНрд░реЛрдд рдХреЛ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдХрд╛рд░реНрдпрдХреНрд░рдо рдиреЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд▓рд╛рдЗрд╡ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рддреИрдпрд╛рд░ рдХрд┐рдП рд╣реИрдВред
рд╡рд┐рдиреНрдпрд╛рд╕
GitLab рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдВ рдФрд░
рд░рдЬрд┐рд╕реНрдЯрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
рдЖрдк рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдЬреИрд╕реЗ рдХрд┐ GitHub, Twitter, Google, BitBucket, Salesforce рдпрд╛ рдмрд╕ рдЦреБрд▓реЗ рдлреЙрд░реНрдо рдХреЛ рднрд░рдХрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж, GitLab рд╣рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА:
рдЖрдЗрдП рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ:
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдирд╛рдП рдЧрдП рднрдВрдбрд╛рд░ рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЦрд┐рдбрд╝рдХреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЬрдм рдЖрдк рдХрд╛рд░реНрдп рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ, рддреЛ GitLab CI
.gitlab-ci.yml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рд▓реЗрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ
рд╕реЗрдЯ рд╕реАрдЖрдИ / рд╕реАрдбреА рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдпрд╛ рдмрд╕ рд╕реНрдерд╛рдиреАрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдХрд░ рдФрд░ рд╕рд╛рдЗрдЯ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓реЛ рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:
рдЕрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреНрдпреВрдирддрдо рдЖрд╡рд░рдг рдмрдирд╛рдПрдВ:
image: debian job: script:
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдФрд░ рдкреНрд░реЗрд╖рдг рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
- apt-get update && apt-get -y install wget gnupg - wget -O - https:
рдЕрдЧрд▓рд╛, рд╣рдо OBS рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ:
- apt-get -y install build-essential cmake make pkg-config libx11-dev libgl1-mesa-dev libpulse-dev libxcomposite-dev libxinerama-dev libv4l-dev libudev-dev libfreetype6-dev libfontconfig-dev qtbase5-dev libqt5x11extras5-dev libx264-dev libxcb-xinerama0-dev libxcb-shm0-dev libjack-jackd2-dev libcurl4-openssl-dev libavcodec-dev libqt5svg5 libavfilter-dev libavdevice-dev libsdl2-dev ffmpeg qt5-default qtscript5-dev libssl-dev qttools5-dev qttools5-dev-tools qtmultimedia5-dev libqt5svg5-dev libqt5webkit5-dev libasound2 libxmu-dev libxi-dev freeglut3-dev libasound2-dev libjack-jackd2-dev libxrandr-dev libqt5xmlpatterns5-dev libqt5xmlpatterns5 coccinelle parallel libapparmor-dev libcap-dev libseccomp-dev python3-dev python3-setuptools docbook2x libgnutls28-dev libselinux1-dev linux-libc-dev libtool autotools-dev libio-socket-ssl-perl libnet-ssleay-perl ca-certificates
рдЕрдм рд╣рдореЗрдВ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓ PVS-Studio.lic рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА ../.config/PVS-Studio)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрдХрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛):
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
рдпрд╣рд╛рдВ
PVS_NAME рдФрд░
PVS_KEY рдЙрди рдЪрд░ рдХреЗ рдирд╛рдо рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдореВрд▓реНрдп рд╣рдо рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓реЙрдЧрд┐рди рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдЙрдирдХреЗ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ: рд╕реЗрдЯрд┐рдВрдЧреНрд╕> CI / CD> рдЪрд░ред
Cmake рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ:
- cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On /builds/Stolyarrrov/obscheck/ - make -j4
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪрд▓рд╛рдПрдВ:
- pvs-studio-analyzer analyze -o PVS-Studio.log
PVS-Studio.log рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИред рдорд╛рдирд╡ рдЖрдВрдЦ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реБрд▓рдн рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ plog- рдХрдирд╡рд░реНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓реЙрдЧ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрд╕рд╛рди рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд▓реЙрдЧ рдХреЛ HTML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ:
- plog-converter -t html PVS-Studio.log -o PVS-Studio.html
рдЖрдк
рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдХреАрд▓ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ рдФрд░ рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рднреЗрдЬ рджреЗрдВрдЧреЗред
- sendemail -t $MAIL_TO -u "PVS-Studio report, commit:GITLAB_COMMIT" -m "PVS-Studio report, commit:GITLAB_COMMIT" -s $GMAIL_PORT -o tls=auto -f $MAIL_FROM -xu $MAIL_FROM -xp $MAIL_FROM_PASS -a PVS-Studio.log PVS-Studio.html
рдкреВрд░реНрдг .itlab-ci.yml:
image: debian job: script: - apt-get update && apt-get -y install wget gnupg - wget -O - https:
рдкреНрд░рддрд┐рдмрджреНрдз рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдпрджрд┐ рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд┐рдпрд╛, рддреЛ рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВрдЧреЗ:
рдпрд╣ GitLab CI рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рдиреНрдп рд╣реИред рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЯреИрдм
CI / CD> рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рд░рдирд┐рдВрдЧ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рджреЗрдЦреЗрдВрдЧреЗ рдЬрд╣рд╛рдБ рд╣рдорд╛рд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЪрд▓рддреА рд╣реИред рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ:
рдиреМрдХрд░реА рд╕рдлрд▓ рд╣реБрдИредрддреЛ рдпрд╣ рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде html рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо
рдЖрдЗрдП рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдУрдкрди рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рддреЗ рд╣реБрдП рддрд╛рдХрд┐ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рд╕рд╛рд░ рдорд┐рд▓ рд╕рдХреЗред рдЪреВрдВрдХрд┐ рд▓реЗрдЦ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп PVS-Studio рдФрд░ GitLab CI / CD рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИ, рдХреЗрд╡рд▓ рдХрдИ nontrivial рдЙрджрд╛рд╣рд░рдг рдЙрдард╛рдП рдЧрдП рд╣реИрдВред рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ рдФрд░ рдпрджрд┐ рд╡реЗ рдЪрд╛рд╣реЗрдВ, рддреЛ рдПрдХ рдЕрдзрд┐рдХ рдЧрд╣рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ
рдореБрдлреНрдд рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ
рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд░ рдХреЛрдИ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ
рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░
рд╕рдХрддрд╛ рд╣реИ ред
рддреЛ, рдЪрд▓рд┐рдП Open Broadcaster Software рдореЗрдВ рдорд┐рд▓реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВред
рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ N резV547 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'back_size' рд╕рдЪ рд╣реИред Circlebuf.h (138)
struct circlebuf { .... size_t capacity; }; static inline void circlebuf_place(struct circlebuf *cb, size_t position,....,const void *data, size_t size) { .... size_t data_end_pos; data_end_pos = position + size; if (data_end_pos > cb->capacity) { size_t back_size = data_end_pos - cb->capacity; if (back_size) { memcpy((uint8_t *)cb->data + position, data, loop_size); } .... }
рдпрджрд┐ рд▓рд╛рдЗрди
(data_end_pos> cb-> рдХреНрд╖рдорддрд╛) рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдпрджрд┐ рдпрд╣ рд╢рд░реНрдд рд╕рд╣реА рд╣реИ, рддреЛ рдиреАрдЪреЗ рдХреА рд▓рд╛рдЗрди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд
рдмреИрдХ_рд╕рд╛рдЗрдЬрд╝ рд╡реИрд░рд┐рдПрдмрд▓, рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдБ рд╣рдо рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЦреНрдпрд╛рдд рдЫреЛрдЯреЗ рдореВрд▓реНрдп рдХреЗ рдШрдЯрд╛рд╡ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рд╢рд░реНрдд, рдЬреЛ рдиреАрдЪреЗ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рд╣реИ, рд╣рдореЗрд╢рд╛
рд╕рд╣реА рд╣реЛрдЧреАред рдЕрддрд┐рд░реЗрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдЙрд╕ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдирд╣реАрдВ рд╣реИ рдЬрдм рдпрд╣ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкреАрдЫрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред
рдЪреЗрддрд╛рд╡рдиреА рдПрди 2, рдПрди 3V629 '1 << рдЗрдВрдбреЗрдВрдЯ' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде 32-рдмрд┐рдЯ рдореВрд▓реНрдп рдХрд╛ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯрд┐рдВрдЧред profiler.c (610)
static void profile_print_entry(uint64_t active, unsigned indent, ....) { .... active &= (1 << indent) - 1; .... }
32-рдмрд┐рдЯ рдФрд░ 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рднреНрд░рдорд┐рдд рд╕рдВрдЪрд╛рд▓рди рдпрд╣рд╛рдВ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореБрдЦреМрдЯрд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ, 32-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ (рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
(1 << рдЗрдВрдбреЗрдВрдЯ) - 1 ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ
рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдлреИрд▓рддрд╛
рд╣реИ & = ...ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдореБрдЦреМрдЯрд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп, 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рд╕рд╣реА рдХреЛрдб рд╕рдВрд╕реНрдХрд░рдг:
active &= ((uint64_t)(1) << indent) - 1;
рдпрд╛:
active &= (1ull << indent) - 1;
рд╡реИрд╕реЗ, рдЗрд╕ рдмреНрд▓реЙрдХ рдХрд╛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдиреАрдЪреЗ рд╣реИ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рднреА рдЬрд╛рд░реА рдХреА:
V629 '1 << рдЗрдВрдбреЗрдВрдЯ' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде 32-рдмрд┐рдЯ рдореВрд▓реНрдп рдХрд╛ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯрд┐рдВрдЧред profiler.c (719)
рдЪреЗрддрд╛рд╡рдиреА N4V761 рдкрд╛рда рдХреЗ рдЪрд╛рд░ рд╕рдорд╛рди рдмреНрд▓реЙрдХ рдкрд╛рдП рдЧрдП рдереЗред 'рджреГрд╢реНрдп-рд╢реНрд░рд╡реНрдп-рдирд┐рдпрдВрддреНрд░рдгs.c' (353)
static float get_true_peak(....) { .... peak = _mm_max_ps(peak, abs_ps(intrp_samples)); SHIFT_RIGHT_2PS(new_work, work); VECTOR_MATRIX_CROSS_PS(intrp_samples, work, m3, m1, p1, p3); peak = _mm_max_ps(peak, abs_ps(intrp_samples)); SHIFT_RIGHT_2PS(new_work, work); VECTOR_MATRIX_CROSS_PS(intrp_samples, work, m3, m1, p1, p3); peak = _mm_max_ps(peak, abs_ps(intrp_samples)); SHIFT_RIGHT_2PS(new_work, work); VECTOR_MATRIX_CROSS_PS(intrp_samples, work, m3, m1, p1, p3); peak = _mm_max_ps(peak, abs_ps(intrp_samples)); SHIFT_RIGHT_2PS(new_work, work); VECTOR_MATRIX_CROSS_PS(intrp_samples, work, m3, m1, p1, p3); .... }
рдЪрд╛рд░ рд╕рдорд╛рди рдмреНрд▓реЙрдХред рд▓рдЧрднрдЧ рд╣рд░ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдб
рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛрдЧрд╛ред рд╣реЛ рднреА рдХреНрдпреЛрдВ рди, рдпрд╣ рдХреЛрдб рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдмреНрд▓реЙрдХ рд▓рд┐рдЦрдирд╛ рдФрд░ рдЗрд╕реЗ рд▓реВрдк рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛:
for(size_t i = 0; i < 3; i++) { peak = _mm_max_ps(peak, abs_ps(intrp_samples)); SHIFT_RIGHT_2PS(new_work, work); VECTOR_MATRIX_CROSS_PS(intrp_samples, work, m3, m1, p1, p3); }
рдЪреЗрддрд╛рд╡рдиреА n5V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ: '! рд╕рдВрд╢реЛрдзрдХ'ред рдЕрд╡рд▓реЛрдХрди- hotkey.c (662)
typedef struct obs_key_combination obs_key_combination_t; struct obs_key_combination { uint32_t modifiers; obs_key_t key; }; static inline void load_binding(....) { obs_key_combination_t combo = {0}; uint32_t *modifiers = &combo.modifiers; load_modifier(modifiers, data, "shift", INTERACT_SHIFT_KEY); load_modifier(modifiers, data, "control", INTERACT_CONTROL_KEY); load_modifier(modifiers, data, "alt", INTERACT_ALT_KEY); load_modifier(modifiers, data, "command", INTERACT_COMMAND_KEY); if (!modifiers && (combo.key == OBS_KEY_NONE || combo.key >= OBS_KEY_LAST_VALUE)) { .... } .... }
Load_modifier function рдХреА рдкрд░рд┐рднрд╛рд╖рд╛:
static inline void load_modifier(uint32_t *modifiers, obs_data_t *data, const char *name, uint32_t flag) { if (obs_data_get_bool(data, name)) *modifiers |= flag; }
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ,
рд╕рдВрд╢реЛрдзрдХ рдПрдХ рд╕реВрдЪрдХ рд╣реИ, рдЬреЛ
рдХреЙрдореНрдмреЛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ
рд╕рдВрд╢реЛрдзрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкрддреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдЪреЗрдХ рддрдХ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЧреИрд░-рдЕрд╢рдХреНрдд рд░рд╣реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреЗрдХ рдХреЗ рдкрд╣рд▓реЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдкреЙрдЗрдВрдЯрд░ рдХреЛ
рд▓реЛрдб_рдореЛрдбрд┐рдлрд╛рдпрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣
рдбреАрд░рдлреЗрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░,
рд╕рдВрд╢реЛрдзрдХ рдЪреЗрдХ рд╡реНрдпрд░реНрде рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
&& рдСрдкрд░реЗрдЯрд░ рдХреЗ рдХрд╛рд░рдг рд╣рдо рд╣рдореЗрд╢рд╛ рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп
рдЧрд▓рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЙрд╕ рдкрддреЗ рджреНрд╡рд╛рд░рд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ
рд╕рдВрд╢реЛрдзрдХ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд░реЛрдХрдирд╛ рднреВрд▓ рдЧрдпрд╛ред
рддреЛ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреЗрдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
if (!*modifiers && ....) Or like this: if (!combo.modifiers && ....)
рдЪреЗрддрд╛рд╡рдиреА N6V575 рд╕рдВрднрд╛рд╡рд┐рдд рдирд▓ рд╕реВрдЪрдХ 'strncpy' рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 2904, 2903. rtmp.c (2904)
static int PublisherAuth(....) { .... ptr = malloc(r->Link.app.av_len + pubToken.av_len); strncpy(ptr, r->Link.app.av_val, r->Link.app.av_len); .... }
рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрд╛рд░ рдРрд╕рд╛ рдХреЛрдб рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддрд╛ рд╣реИ рдХрд┐
рдореЙрд▓реЛрдХ рдПрдХ рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐
рдореЙрд▓реЙрдХ NULL рдХреЛ рд▓реМрдЯрд╛рддрд╛
рд╣реИ , рддреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐
strncpy рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдореЗрдВ
NULL рдорд╛рди рд╣реЛрдЧрд╛ред
рдореЙрд▓реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП,
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓реЗрдЦ рджреЗрдЦреЗрдВ ред
рдЪреЗрддрд╛рд╡рдиреА рдПрди 7, рдПрди 8, рдПрди 9рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЧрд▓рдд рдЧрдгрдирд╛рдПрдБ рд╣реИрдВ:
class OBSProjector : public OBSQTDisplay { .... float sourceX, sourceY, ....; .... } .... void OBSProjector::OBSRenderMultiview(....) { OBSProjector *window = (OBSProjector *)data; .... auto calcBaseSource = [&](size_t i) { switch (multiviewLayout) { case MultiviewLayout::HORIZONTAL_TOP_24_SCENES: window->sourceX = (i % 6) * window->scenesCX; window->sourceY = window->pvwprgCY + (i / 6) * window->scenesCY; break; case MultiviewLayout::VERTICAL_LEFT_8_SCENES: window->sourceX = window->pvwprgCX; window->sourceY = (i / 2) * window->scenesCY; if (i % 2 != 0) { window->sourceX += window->scenesCX; } break; case MultiviewLayout::VERTICAL_RIGHT_8_SCENES: window->sourceX = 0; window->sourceY = (i / 2) * window->scenesCY; if (i % 2 != 0) { window->sourceX = window->scenesCX; } break; case MultiviewLayout::HORIZONTAL_BOTTOM_8_SCENES: if (i < 4) { window->sourceX = (float(i) * window->scenesCX); window->sourceY = 0; } else { window->sourceX = (float(i - 4) * window->scenesCX); window->sourceY = window->scenesCY; } break; default:
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА:
- V636 'i / 6' рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ 'size_t' рдкреНрд░рдХрд╛рд░ рд╕реЗ 'рдлреНрд▓реЛрдЯ' рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдбрдмрд▓ рдП = (рдбрдмрд▓) (рдПрдХреНрд╕) / рд╡рд╛рдИ ;; рдЦрд┐рдбрд╝рдХреА-рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░.cpp (330)
- V636 'i / 2' рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ 'size_t' рдкреНрд░рдХрд╛рд░ рд╕реЗ 'рдлреНрд▓реЛрдЯ' рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдбрдмрд▓ рдП = (рдбрдмрд▓) (рдПрдХреНрд╕) / рд╡рд╛рдИ ;; рдЦрд┐рдбрд╝рдХреА-рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░.cpp (334)
- V636 'i / 2' рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ 'size_t' рдкреНрд░рдХрд╛рд░ рд╕реЗ 'рдлреНрд▓реЛрдЯ' рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдбрдмрд▓ рдП = (рдбрдмрд▓) (рдПрдХреНрд╕) / рд╡рд╛рдИ ;; рдЦрд┐рдбрд╝рдХреА-рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░.cpp (340)
рдпрд╣рд╛рдБ рд╕рд╣реА рдЙрддреНрддрд░ рд╣реИ: рд▓реЛрдЧреЛрдВ рдореЗрдВ, рдЬрд╣рд╛рдБ
рдореИрдВ рддреИрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ
рд╣реВрдБ ред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╕рд╛рде рдЯреБрдХрдбрд╝реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдореНрдореАрдж рдереАред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, GitLab рдкрд░ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ PVS-Studio рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХреАрдХрд░рдг рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЙрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЧрд┐рдЯрд▓реИрдм рдХреА рдЕрдкрдиреА рдПрдХреАрдХреГрдд рдЖрднрд╛рд╕реА рдорд╢реАрди рд╣реИ, рд╣рдореЗрдВ рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рд╕реЗ рдЖрдкрдХреЛ рдмрд┐рд▓реНрдб рдХреЗ рдареАрдХ рдмрд╛рдж рд╕рдорд╕реНрдпрд╛рдПрдБ рдорд┐рд▓реЗрдВрдЧреАред рдпрд╣ рдЙрд╕ рд╕реНрддрд░ рдкрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрдирдХреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рд▓рд╛рдЧрдд рдЕрднреА рддрдХ рдЫреЛрдЯреА рд╣реИред