рдпрд╣ рдЖрд▓реЗрдЦ рдХреНрд▓рд╛рдЙрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рдЗрд╕ рдмрд╛рд░ рд╣рдо GitLab рдЗрдВрдХ рдХреЗ рдПрдХ рдЙрддреНрдкрд╛рдж, GitLab CI рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред рд╕реАрдЖрдИ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдПрдХреАрдХрд░рдг рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдмрдЧ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ рд╣реИред
рдХреНрд▓рд╛рдЙрдб рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХреАрдХрд░рдг рдкрд░ рд╣рдорд╛рд░реЗ рдЕрдиреНрдп рд▓реЗрдЦреЛрдВ рдХреА рд╕реВрдЪреА:
рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА
GitLab рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реЗрд╡рд╛ рд╣реИред рдЗрд╕реЗ рд╕реАрдзреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ рдЦрд╛рддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдХреЗ, рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕реЗ рд╕реА, рд╕реА ++, рд╕реА # рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ 32-рдмрд┐рдЯ, 64-рдмрд┐рдЯ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рдПрдЖрд░рдПрдо рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдмрд╛рд░ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕
рд▓реЗрдЦ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рджреЗрдЦреЗрдВ рдФрд░ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреИрд╕реЗ рдХрд░реЗрдВред
OBS рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдУрдкрди рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдФрд░ рдУрдкрди рд╕реЛрд░реНрд╕ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕реВрдЯ рд╣реИред OBS рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп, рджреГрд╢реНрдп рд░рдЪрдирд╛, рдбрд┐рдХреЛрдбрд┐рдВрдЧ, рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рдкреНрд░рд╕рд╛рд░рдг рдореЗрдВ рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЕрд╡рд░реЛрдзрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд░рд┐рдпрд▓ рдЯрд╛рдЗрдо рдореИрд╕реЗрдЬрд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдХрд┐рд╕реА рднреА рд╕реНрд░реЛрдд рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ RTMP рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ - рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкреНрд░реАрд╕реЗрдЯ рд╣реИрдВред
рд╕рдорд╛рдпреЛрдЬрди
GitLab рд╕реЗ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдВ рдФрд░
рд░рдЬрд┐рд╕реНрдЯрд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
рдЖрдк рдРрд╕реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдЦрд╛рддреЛрдВ рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ: GitHub, Twitter, Google, BitBucket, Salesforce рдпрд╛ рдмрд╕ рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реЗ рдлреЙрд░реНрдо рдХреЛ рднрд░рдХрд░ред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж, GitLab рд╣рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдорд┐рд▓рддрд╛ рд╣реИ:
рдЙрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рд╕реВрдЪреА рдЬрд┐рдирд╕реЗ рдЖрдк рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ:
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдирд╛рдП рдЧрдП рднрдВрдбрд╛рд░ рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЙрди рдкреНрд░реЙрдореНрдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрдорд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рдВрдбреЛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред
рдЬрдм рдХрд╛рд░реНрдп рдкреНрд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ, GitLab CI
.gitlab-ci.yml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рд▓реЗрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдпрд╛ рддреЛ
рд╕реЗрдЯ рдЕрдк CI / CD рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдпрд╛ рдмрд╕ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдмрдирд╛рдХрд░ рдФрд░ рд╕рд╛рдЗрдЯ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
рдЖрдЗрдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреНрдпреВрдирддрдо рдЖрд╡рд░рдг рдмрдирд╛рдПрдВ:
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:
рдкреНрд░рддрд┐рдмрджреНрдз рдкрд░рд┐рд╡рд░реНрддрди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдпрджрд┐ рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╢рд┐рд▓рд╛рд▓реЗрдЦ рджреЗрдЦреЗрдВрдЧреЗ:
рдпрд╣ рдЧрд┐рдЯрд▓реИрдм рд╕реАрдЖрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рдиреНрдп рд╣реИред рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
CI / CD> рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ
редрд░рдирд┐рдВрдЧ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреА рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕ рдкрд░ рд╣рдорд╛рд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЪрд▓ рд░рд╣реА рд╣реИред рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рд╣рдореЗрдВ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ:
рдиреМрдХрд░реА рд╕рдлрд▓ рд╣реБрдИредрдЗрд╕рд▓рд┐рдП, рдореЗрд▓ рдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде HTML рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХрд╛ рд╕рдордпред
рдорд╛рдиреНрдпрддрд╛ рдкрд░рд┐рдгрд╛рдо
рдЖрдЗрдП рдЕрдм рд╣рдо рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдУрдкрди рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдЯреИрдЯрд┐рдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рд╛рд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИрдВред рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдЧрд┐рдЯрд▓реИрдм рд╕реАрдЖрдИ / рд╕реАрдбреА рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдб рдЯреБрдХрдбрд╝реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡реЗ рдЪрд╛рд╣реЗрдВ, рддреЛ рд╡реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЕрдзрд┐рдХ рдЧрд╣рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рд╡реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ
рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд░ рдХреЛрдИ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рддреЛ, рдЖрдЗрдП рдУрдкрди рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдкрд╛рдИ рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред
рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ 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-> рдХреНрд╖рдорддрд╛) , рд╕реНрдерд┐рддрд┐ рдХреА рдкреВрд░реНрддрд┐ рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдЪрд░
back_size , рдиреАрдЪреЗ рдХреА рд░реЗрдЦрд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЫреЛрдЯрд╛ рд╣реЛрдиреЗ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕реНрдерд┐рддрд┐ рдиреАрдЪреЗ рдПрдХ рдФрд░ рдкрдВрдХреНрддрд┐, рд╣рдореЗрд╢рд╛
рд╕рдЪ рд╣реЛрдЧреАред рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдерд┐рддрд┐ рдЗрддрдиреА рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдирд╣реАрдВ рд╣реИ рдЬрдм рдЗрд╕рдХреЗ рддрд╣рдд рдПрдХ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЪреЗрддрд╛рд╡рдиреА рдПрди 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; }
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ,
рд╕рдВрд╢реЛрдзрдХ рдПрдХ рд╕реВрдЪрдХ рд╣реИ рдЬреЛ
рдХреЙрдореНрдмреЛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ
рд╕рдВрд╢реЛрдзрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдиреЙрдирдЬрд░реЛ рд░рд╣реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ - рдЖрд░рдВрднреАрдХрд░рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдмреАрдЪ, рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ
рд▓реЛрдб_рдореЙрдбрд┐рдлрд╛рдпрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕реЗ
dferferenced рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЬрд╛рдБрдЪ
! рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
&& рдСрдкрд░реЗрдЯрд░ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди
рдХрд░рддреЗ рд╕рдордп рд╣рдо рд╣рдореЗрд╢рд╛
рдЧрд▓рдд рд╣реЛрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░
рд╕рдВрд╢реЛрдзрдХ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрддреЗ рдкрд░ рд╕реНрдерд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд░реЛрдХрдирд╛ рднреВрд▓ рдЧрдпрд╛ред
рдпрд╛рдиреА рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреЗрдХ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
if (!*modifiers && ....) : 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)
рд╕рд╣реА рдЙрддреНрддрд░: рдЙрди рд▓реЛрдЧреЛрдВ рдореЗрдВ рдЬрд┐рдирдореЗрдВ
рдореБрдЭреЗ рддреИрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИред рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рд╣рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдореНрдореАрдж рдереАред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЖрдкрдХреЗ рдЧрд┐рдЯрд▓реИрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЙрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдбрд╛рд▓реЗрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЧрд┐рдЯрд▓реИрдм рдХреА рдЕрдкрдиреА рдПрдХреАрдХреГрдд рдЖрднрд╛рд╕реА рдорд╢реАрди рд╣реИ, рд╣рдореЗрдВ рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рддрдм рдЦрддреНрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА рдЬрдм рд╕рдВрдкрд╛рджрди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рд▓рд╛рдЧрдд рдЕрднреА рднреА рдЫреЛрдЯреА рд╣реИред

рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╡реНрд▓рд╛рджрд┐рд╕реНрд▓рд╛рд╡ рд╕реНрдЯреЛрд▓рд┐рд░реЛрд╡ред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЗрди рдж рдХреНрд▓рд╛рдЙрдбреНрд╕: рдЧрд┐рдЯрд▓реИрдм рд╕реАрдЖрдИ / рд╕реАрдбреА ред