рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдмрд╛рджрд▓реЛрдВ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ: рд╕рд░реНрдХрд┐рд▓рд╕реАрдЖрдИ

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

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

рдиреЛрдЯред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдХреНрд▓рд╛рдЙрдб рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдкрд░ рдЕрдиреНрдп рд▓реЗрдЦ рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рдЖрдЗрдП рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдХрд╣реЗрдВред

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

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

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

рд╕рдорд╛рдпреЛрдЬрди


CircleCI рд╣реЛрдо рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ "рд╕рд╛рдЗрди рдЕрдк" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рдЪрд┐рддреНрд░ 1

рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдкрд░, рд╣рдореЗрдВ GitHub рдпрд╛ Bitbucket рдЦрд╛рддреЗ рд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред GitHub рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ CircleCI рдЖрд╡реЗрджрди рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВред

рдЪрд┐рддреНрд░ 3

рд╣рдо рдЖрд╡реЗрджрди рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рддреЗ рд╣реИрдВ (рд╣рд░реЗ рдмрдЯрди "рд╕рд░реНрдХрд▓ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░реЗрдВ") рдФрд░ рд╣рдореЗрдВ рд╕реНрд╡рд╛рдЧрдд рдкреГрд╖реНрда "рд╕рд░реНрдХрд▓рд╕реАрдЖрдИ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!"

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

рдЗрд╕ рдкреГрд╖реНрда рдкрд░, рд╣рдо рддреБрд░рдВрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд░реНрдХрд┐рд▓рд╕реАрдЖрдИ рдореЗрдВ рдЗрдХрдЯреНрдареЗ рд╣реЛрдВрдЧреЗред рд╣рдо рдЕрдкрдиреЗ рднрдВрдбрд╛рд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ "рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВред

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

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

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

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

рд╣рдо "рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ PVS_USERNAME рдФрд░ PVS_KEY рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓рд┐рдП рд╣реЛрддреА рд╣реИред

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

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╕рд░реНрдХрд┐рд▓рд╕реАрдЖрдИ рдкрде рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХрд╛рд░реНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред circleci / config.ymlред рдЗрд╕реЗ рдЬреЛрдбрд╝реЗрдВред

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

version: 2 jobs: build: machine: image: ubuntu-1604:201903-01 

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрд╡рд╢реНрдпрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ apt рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 steps: - checkout - run: sudo -- sh -c " add-apt-repository -y ppa:team-xbmc/xbmc-ppa-build-depends && add-apt-repository -y ppa:wsnipex/vaapi && add-apt-repository -y ppa:pulse-eight/libcec && apt-get update" - run: sudo apt-get install -y automake autopoint build-essential cmake curl default-jre gawk gdb gdc gettext git-core gperf libasound2-dev libass-dev libbluray-dev libbz2-dev libcap-dev libcdio-dev libcec4-dev libcrossguid-dev libcurl3 libcurl4-openssl-dev libdbus-1-dev libegl1-mesa-dev libfmt3-dev libfontconfig-dev libfreetype6-dev libfribidi-dev libfstrcmp-dev libgif-dev libgl1-mesa-dev libglu1-mesa-dev libiso9660-dev libjpeg-dev liblcms2-dev libltdl-dev liblzo2-dev libmicrohttpd-dev libmysqlclient-dev libnfs-dev libpcre3-dev libplist-dev libpng-dev libpulse-dev libsmbclient-dev libsqlite3-dev libssl-dev libtag1-dev libtinyxml-dev libtool libudev-dev libusb-dev libva-dev libvdpau-dev libxml2-dev libxmu-dev libxrandr-dev libxrender-dev libxslt1-dev libxt-dev mesa-utils nasm pmount python-dev python-imaging python-sqlite rapidjson-dev swig unzip uuid-dev yasm zip zlib1g-dev wget 

PVS-Studio рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 - run: wget -q -O - https://files.viva64.com/etc/pubkey.txt | sudo apt-key add - && sudo wget -O /etc/apt/sources.list.d/viva64.list https://files.viva64.com/etc/viva64.list - run: sudo -- sh -c "apt-get update && apt-get install pvs-studio -y" 

рдЪрд▓реЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдХрдЯреНрдард╛:

 - run: sudo make -C tools/depends/target/flatbuffers PREFIX=/usr/local 

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ Makefiles рдЙрддреНрдкрдиреНрди:

 - run: mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Debug .. 

рдЕрдЧрд▓рд╛ рдХрджрдо рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред рджреВрд╕рд░рд╛ рдХрдорд╛рдВрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдЯреНрд░реЗрд╕ рдХрд╛ рд╕рдВрдХрд▓рди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред

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

--disableLicenseExpirationCheck ред

рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ HTML рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдХреЛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:

 - run: pvs-studio-analyzer credentials -o PVS.lic ${PVS_USER} ${PVS_KEY} - run: pvs-studio-analyzer trace -- make -j2 -C build/ - run: pvs-studio-analyzer analyze -j2 -l PVS.lic -o PVS-Studio.log --disableLicenseExpirationCheck - run: plog-converter -t html -o PVS-Studio.html PVS-Studio.log 

рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд░рд┐рдкреЛрд░реНрдЯ рд╕рд╣реЗрдЬреЗрдВ:

 - run: mkdir PVS_Result && cp PVS-Studio.* ./PVS_Result/ - store_artifacts: path: ./PVS_Result 

.Circleci / config.yml рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреВрд░реНрдг рдкрд╛рда:

 version: 2.1 jobs: build: machine: image: ubuntu-1604:201903-01 steps: - checkout - run: sudo -- sh -c " add-apt-repository -y ppa:team-xbmc/xbmc-ppa-build-depends && add-apt-repository -y ppa:wsnipex/vaapi && add-apt-repository -y ppa:pulse-eight/libcec && apt-get update" - run: sudo apt-get install -y automake autopoint build-essential cmake curl default-jre gawk gdb gdc gettext git-core gperf libasound2-dev libass-dev libbluray-dev libbz2-dev libcap-dev libcdio-dev libcec4-dev libcrossguid-dev libcurl3 libcurl4-openssl-dev libdbus-1-dev libegl1-mesa-dev libfmt3-dev libfontconfig-dev libfreetype6-dev libfribidi-dev libfstrcmp-dev libgif-dev libgl1-mesa-dev libglu1-mesa-dev libiso9660-dev libjpeg-dev liblcms2-dev libltdl-dev liblzo2-dev libmicrohttpd-dev libmysqlclient-dev libnfs-dev libpcre3-dev libplist-dev libpng-dev libpulse-dev libsmbclient-dev libsqlite3-dev libssl-dev libtag1-dev libtinyxml-dev libtool libudev-dev libusb-dev libva-dev libvdpau-dev libxml2-dev libxmu-dev libxrandr-dev libxrender-dev libxslt1-dev libxt-dev mesa-utils nasm pmount python-dev python-imaging python-sqlite rapidjson-dev swig unzip uuid-dev yasm zip zlib1g-dev wget - run: wget -q -O - https://files.viva64.com/etc/pubkey.txt | sudo apt-key add тАУ && sudo wget -O /etc/apt/sources.list.d/viva64.list https://files.viva64.com/etc/viva64.list - run: sudo -- sh -c "apt-get update && apt-get install pvs-studio -y" - run: sudo make -C tools/depends/target/flatbuffers PREFIX=/usr/local - run: mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Debug .. - run: pvs-studio-analyzer credentials -o PVS.lic ${PVS_USER} ${PVS_KEY} - run: pvs-studio-analyzer trace -- make -j2 -C build/ - run: pvs-studio-analyzer analyze -j2 -l PVS.lic -o PVS-Studio.log --disableLicenseExpirationCheck - run: plog-converter -t html -o PVS-Studio.html PVS-Studio.log - run: mkdir PVS_Result && cp PVS-Studio.* ./PVS_Result/ - store_artifacts: path: ./PVS_Result 

рд╣рдо рдлрд╛рдЗрд▓ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд░реНрдХрд┐рд▓рд╕реАрдЖрдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред

рдЪрд┐рддреНрд░ 12

рдХрд╛рд░реНрдп рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рдж, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ "рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ" рдЯреИрдм рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред

рдЪрд┐рддреНрд░ 11

рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо


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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V504 рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо ';' 'рд╡рд╛рдкрд╕реА' рдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж рдЧрд╛рдпрдм рд╣реИред рдПрдбрд╡рд╛рдВрд╕реНрдбрд╕реЗрдЯрд┐рдВрдЧред рд╕реАрдкреАрдкреА: 1476

 void CAdvancedSettings::SetExtraArtwork(const TiXmlElement* arttypes, std::vector<std::string>& artworkMap) { if (!arttypes) return artworkMap.clear(); const TiXmlNode* arttype = arttypes->FirstChild("arttype"); .... } 

рдХреЛрдб рдХреЗ рдкреНрд░рд╛рд░реВрдкрдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рддрд░реНрдХ рдорд╛рди рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

  • рдЕрдЧрд░ рдЖрд░реНрдЯрдЯрд╛рдЗрдкреНрд╕ рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдкреВрд░рд╛ рдХрд░реЗрдВ;
  • рдЕрдЧрд░ рдЖрд░реНрдЯрдЯрд╛рдЗрдкреНрд╕ рдиреЙрди-рдЬреАрд░реЛ рдкреЙрдЗрдВрдЯрд░ рд╣реИ, рддреЛ рдЖрд░реНрдЯрд╡рд░реНрдХ рдореИрдк рд╡реЗрдХреНрдЯрд░ рдХреЛ рдХреНрд▓рд┐рдпрд░ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдХреБрдЫ рдЕрдиреНрдп рдПрдХреНрд╢рди рдХрд░реЗрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓рд╛рдкрддрд╛ рдЪрд░рд┐рддреНрд░ ';) рд╕рдорд╛рдпреЛрдЬрди рдХрд┐рдпрд╛ рдЧрдпрд╛; рдирддреАрдЬрддрди, рдирд┐рд╖реНрдкрд╛рджрди рддрд░реНрдХ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрд╡рд░реВрдкрдг рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

  • рдпрджрд┐ рдЖрд░реНрдЯрдЯрд╛рдЗрдкреНрд╕ рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рд╣реИ, рддреЛ рдЖрд░реНрдЯрд╡рд░реНрдХрдкрд╛рдЗрдк рд╡реЗрдХреНрдЯрд░ рд╕рд╛рдл рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдзрд┐ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддреА рд╣реИ;
  • рдЕрдЧрд░ рдЖрд░реНрдЯрдЯрд╛рдЗрдкреНрд╕ рдиреЙрди-рдЬреАрд░реЛ рдкреЙрдЗрдВрдЯрд░ рд╣реИ, рддреЛ рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд░реНрдЯрд╡рд░реНрдХрдкрд╛рдЗрдк рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕рд╛рдл рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЧрд▓рддреА рди рд╣реЛред рдФрд░ рд╢рд╛рдпрдж рд╣реА рдХреЛрдИ рднреА рдХрд▓рд╛рдХреГрддрд┐ рдХрд▓рд╛рдХреГрддрд┐ рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦреЗрдЧрд╛ред рдХреНрд▓рд┐рдпрд░ (); :)ред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :

  • V547 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'lastsector' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред udf25.cpp: 636
  • V547 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'lastsector' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред udf25.cpp: 644
  • V571 рдЖрд╡рд░реНрддреА рдЬрд╛рдБрдЪред 'If (lastsector)' рд╕реНрдерд┐рддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЗрди 636 рдореЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдереАред udf25.cpp: 644

 int udf25::UDFGetAVDP( struct avdp_t *avdp) { .... uint32_t lastsector; .... lastsector = 0; // <= .... for(;;) { .... if( lastsector ) { // <= V547 lbnum = lastsector; terminate = 1; } else { //! @todo Find last sector of the disc (this is optional). if( lastsector ) // <= V547 lbnum = lastsector - 256; else return 0; } } .... } 

// <= рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдорд╛рди 0 рдХреЛ lastsector рд╡реИрд░рд┐рдПрдмрд▓ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рддрдм рдЗрд╕реЗ рджреЛ рдмрд╛рд░ if рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╢рд░реНрдд рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЪрд░ рдХрд╛ рдорд╛рди рдпрд╛ рддреЛ рд▓реВрдк рдореЗрдВ рдпрд╛ рдЗрди рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдмреАрдЪ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рджреЛрдиреЛрдВ рдХреА рд╢рд╛рдЦрд╛рдПрдВ рдпрджрд┐ рдХрдердиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рд╕рдЪ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ ( рдЯреВрдбреВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ)ред

рд╡реИрд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рддреБрд░рдВрдд рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП 3 рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреАред рдХрднреА-рдХрднреА, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рднреА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╣ рдорд╛рдирддреЗ рд░рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЧрд▓рдд рд╣реИ ... рдПрдХ рд╕рд╣рдХрд░реНрдореА рдиреЗ " рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдорд░реНрдерди рд╕реЗ рдПрдХ рджрд┐рди " :) рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рд┐рдЦрд╛ рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V547 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'рдорд╛рдиред рдЖрдХрд╛рд░ ()! = 2' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИред GUIControlSettings.cpp: 1174

 bool CGUIControlRangeSetting::OnClick() { .... std::vector<CVariant> values; SettingConstPtr listDefintion = settingList->GetDefinition(); switch (listDefintion->GetType()) { case SettingType::Integer: values.push_back(m_pSlider-> GetIntValue(CGUISliderControl::RangeSelectorLower)); values.push_back(m_pSlider-> GetIntValue(CGUISliderControl::RangeSelectorUpper)); break; case SettingType::Number: values.push_back(m_pSlider-> GetFloatValue(CGUISliderControl::RangeSelectorLower)); values.push_back(m_pSlider-> GetFloatValue(CGUISliderControl::RangeSelectorUpper)); break; default: return false; } if (values.size() != 2) return false; SetValid(CSettingUtils::SetList(settingList, values)); return IsValid(); } 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдорд╛рдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ред size ()! = 2 рдирд┐рд░рд░реНрдердХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛ ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рдХреЗрд╕ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ 2 рддрддреНрд╡ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рдЦрд╛рд▓реА рдерд╛, рддреЛ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рджреЛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛; рдЕрдиреНрдпрдерд╛ ( рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рд╛рдЦрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп), рд╡рд┐рдзрд┐ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧреАред

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V547 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'prio == 0x7fffffff' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред DBusReserve.cpp: 57

 bool CDBusReserve::AcquireDevice(const std::string& device) { .... int prio = INT_MAX; .... res = dbus_bus_request_name( m_conn, service.c_str(), DBUS_NAME_FLAG_DO_NOT_QUEUE | (prio == INT_MAX ? 0 : DBUS_NAME_FLAG_ALLOW_REPLACEMENT), // <= error); .... } 

Prio рд╡реИрд░рд┐рдПрдмрд▓ INT_MAX рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддреБрд▓рдирд╛рддреНрдордХ prio == INT_MAX рдореЗрдВ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрд░рдВрдн рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдмреАрдЪ, рдЗрд╕рдХрд╛ рдорд╛рди рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ prio == INT_MAX рдХрд╛ рдорд╛рди рд╕рддреНрдп рд╣реИ , рдФрд░ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рд╣рдореЗрд╢рд╛ 0 рд▓реМрдЯрд╛рдПрдЧрд╛ред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА :

  • V575 рд╕рдВрднрд╛рд╡рд┐рдд рдирд▓ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'рдореЗрдорд╕реАрдкреА' рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 39, 38. DVDOverlayImage.h: 39
  • V575 рд╕рдВрднрд╛рд╡рд┐рдд рдирд▓ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'рдореЗрдорд╕реАрдкреА' рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 44, 43. DVDOverlayImage.h: 44

 CDVDOverlayImage(const CDVDOverlayImage& src) : CDVDOverlay(src) { Data = (uint8_t*)malloc(src.linesize * src.height); memcpy(data, src.data, src.linesize * src.height); // <= if(src.palette) { palette = (uint32_t*)malloc(src.palette_colors * 4); memcpy(palette, src.palette, src.palette_colors * 4); // <= } .... } 

рджреЛрдиреЛрдВ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╣реА рдкреИрдЯрд░реНрди рд╣реИ - рдореЙрд▓реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЗрдореЙрдкреА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ NULL рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдЬрд╛рдБрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

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

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V522 рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдирд▓ рдкреЙрдЗрдВрдЯрд░ 'рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐' рдХреА dereferencing рд╣реЛ рд╕рдХрддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 985, 981. emu_msvcrt.cpp: 985

 struct dirent *dll_readdir(DIR *dirp) { .... struct dirent *entry = NULL; entry = (dirent*) malloc(sizeof(*entry)); if (dirData->curr_index < dirData->items.Size() + 2) { if (dirData->curr_index == 0) strncpy(entry->d_name, ".\0", 2); .... } 

рд╕реНрдерд┐рддрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЗ рд╕рдорд╛рди рд╣реИред рдореЙрд▓реЙрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рд╕реВрдЪрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЪрд░ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ NULL ( рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐-> d_name ) рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V773 ' рдкреНрд░рдЧрддрд┐рд╣реИрдВрдбрд▓рд░ ' рдкреЙрдЗрдВрдЯрд░ рдХреА рджреГрд╢реНрдпрддрд╛ рдЧреБрдВрдЬрд╛рдЗрд╢ рдореЗрдореЛрд░реА рдХреЛ рдЬрд╛рд░реА рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдИ рдереАред рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╕рдВрднрд╡ рд╣реИред PVRGUIChannelIconUpdater.cpp: 94

 void CPVRGUIChannelIconUpdater::SearchAndUpdateMissingChannelIcons() const { .... CPVRGUIProgressHandler* progressHandler = new CPVRGUIProgressHandler(g_localizeStrings.Get(19286)); for (const auto& group : m_groups) { const std::vector<PVRChannelGroupMember> members = group->GetMembers(); int channelIndex = 0; for (const auto& member : members) { progressHandler->UpdateProgress(member.channel->ChannelName(), channelIndex++, members.size()); .... } progressHandler->DestroyProgress(); } 

рдкреНрд░рдЧрддрд┐рд╣реИрдВрдбрд▓рд░ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдирдпрд╛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдбрд┐рд▓реАрдЯ рдХреЛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдореЗрдореЛрд░реА рд▓реАрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'Idx' рдЗрдВрдбреЗрдХреНрд╕ рд╕рд░рдгреА рдмрд╛рдЙрдВрдб рд╕реЗ рдкрд░реЗ рдЗрдВрдЧрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред PlayerCoreFactory.cpp: 240

 std::vector<CPlayerCoreConfig *> m_vecPlayerConfigs; bool CPlayerCoreFactory::PlaysVideo(const std::string& player) const { CSingleLock lock(m_section); size_t idx = GetPlayerIndex(player); if (m_vecPlayerConfigs.empty() || idx > m_vecPlayerConfigs.size()) return false; return m_vecPlayerConfigs[idx]->m_bPlaysVideo; } 

рдпрджрд┐ рдХрдерди рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдХрд╛рд░рдг рд╡реЗрдХреНрдЯрд░ m_vecPlayerConfigs рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рддреНрдп рд╣реИ рддреЛ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред рдирддреАрдЬрддрди, рдпрджрд┐ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдЕрдВрддрд┐рдо рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛, рддреЛ рд╡реЗрдХреНрдЯрд░ m_vecPlayerConfigs рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реАрдорд╛ рдореЗрдВ рд╣реИ: [1]; IDX]ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдиреАрдЪреЗ рджреА рдЧрдИ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИ idx call : m_vecPlayerConfigs [idx] -> m_bPlaysVideo ред рдирддреАрдЬрддрди, рдЕрдЧрд░ рдЖрдИрдбреА рд╡реЗрдХреНрдЯрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдЖрд╡реЗрджрди рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкреНрд▓реЗрдЯрд┐рдирдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V542 рдПрдХ рд╡рд┐рд╖рдо рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд╕реНрдЯ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: 'bool' to 'char *'ред PltCtrlPoint.cpp: 1617

 NPT_Result PLT_CtrlPoint::ProcessSubscribeResponse(...) { .... bool subscription = (request.GetMethod().ToUppercase() == "SUBSCRIBE"); .... NPT_String prefix = NPT_String::Format(" PLT_CtrlPoint::ProcessSubscribeResponse %ubscribe for service \"%s\" (result = %d, status code = %d)", (const char*)subscription?"S":"Uns", // <= (const char*)service->GetServiceID(), res, response?response->GetStatusCode():0); .... } 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрдЪрд╛рд▓рди рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рднреНрд░рдорд┐рдд рд╣реИред Const char * ternary рдСрдкрд░реЗрдЯрд░ ( рд╕рджрд╕реНрдпрддрд╛? "S": "Uns" ) рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╕рджрд╕реНрдпрддрд╛ рд╣реИ ред рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ: c == '\ t'ред NptUtils.cpp: 863

 NPT_Result NPT_ParseMimeParameters(....) { .... case NPT_MIME_PARAMETER_PARSER_STATE_NEED_EQUALS: if (c < ' ') return NPT_ERROR_INVALID_SYNTAX; // END or CTLs are invalid if (c == ' ' || c == '\t') continue; // ignore leading whitespace .... } 

рд╕реНрдкреЗрд╕ рдХреЛрдб 0x20 рд╣реИ, рдЯреИрдм рдХреЛрдб 0x09 рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рдм рдбреЗрдкреНрд░рд┐рд╕рд┐рдПрд╢рди c == '\ t' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ c <'' рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрджрд┐ рд╕рд╣реА рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛)ред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд▓реЗ CI рд╕рд┐рд╕реНрдЯрдо (CircleCI) рдкрд░, рд╣рдо рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ, рд╣рдо рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрди рд╣реЛрдВрдЧреЗред

рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдк рдХреЗ рд▓рд┐рдП рд▓рд╛рдкрд░рд╡рд╛рд╣реА рдХрд╛ рдХреЛрдб, рджреЛрд╕реНрддреЛрдВред :)



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

Source: https://habr.com/ru/post/hi470469/


All Articles