рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдмреНрд░реЗрдкреАрд╕реАрдмреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рддреНрдпрд╛рдкрди

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░

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

LibrePCB


рд▓рд┐рдмрд░рдкреАрд╕реАрдмреА рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╕рд░реНрдХрд┐рдЯ рдФрд░ рдореБрджреНрд░рд┐рдд рд╕рд░реНрдХрд┐рдЯ рдмреЛрд░реНрдб рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ Qt5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкрд╣рд▓реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рд▓реАрдЬрд╝ рд╣реБрдИ, рдЬрд┐рд╕рдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк (* .lp, * .lplib) рдХреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ред рд▓рд┐рдирдХреНрд╕, рдореИрдХрдУрдПрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдмрд╛рдЗрдирд░реА рдкреИрдХреЗрдЬред

LibrePCB


LibrePCB рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ C рдФрд░ C ++ рдореЗрдВ рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 300,000 рдЧреИрд░-рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рдЧреИрд░-рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЛрдВ рдХреЗ 25% рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВред рд╡реИрд╕реЗ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рддрд┐рд╢рдд рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдИ рдЫреЛрдЯреА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╢реАрд░реНрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред GitHub рд╕рд╛рдЗрдЯ рдХреЛрдб: LibrePCB ред

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

рдбрд╛рдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗрд╡рд╛рд▓рд╛ рдордЬрд╝рджреВрд░


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

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

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

diff --git a/src/build.sh b/src/build.sh index 290c57d..2a286dc 100755 --- a/src/build.sh +++ b/src/build.sh @@ -193,6 +193,9 @@ BuildDir() cd ${ProjBinRoot}/build.${DirName} + pvs-studio-analyzer analyze --cfg /src/PVS-Studio.cfg \ + -o ./service-fabric-pvs.log -j4 + if [ "false" = ${SkipBuild} ]; then if (( $NumProc <= 0 )); then NumProc=$(($(getconf _NPROCESSORS_ONLN)+0)) 

рд▓рд┐рдмрд░рдкреАрд╕реАрдмреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЫрд╡рд┐ рдФрд░ рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдФрд░ рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд┐рдХрд▓рд╛ред рдпрд╣рд╛рдБ рдбреЙрдХрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:

 FROM ubuntu:14.04 # install packages RUN DEBIAN_FRONTEND=noninteractive \ apt-get -q update \ && apt-get -qy upgrade \ && apt-get -qy install git g++ qt5-default qttools5-dev-tools qt5-doc \ qtcreator libglu1-mesa-dev dia \ && apt-get clean # checkout librepcb RUN git clone --recursive https://..../LibrePCB.git /opt/LibrePCB \ && cd /opt/LibrePCB .... # build and install librepcb RUN /opt/LibrePCB/dev/docker/make_librepcb.sh .... 

рд╣рдо рдЫрд╡рд┐ рдХрд╛ рд╕рдВрдпреЛрдЬрди рдХрд░рддреЗ рд╕рдордп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдВрдХрд▓рди рдФрд░ рд╕реНрдерд╛рдкрдирд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдПрдХ рдЫрд╡рд┐ рдПрдХрддреНрд░ рдХреА рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд▓реЗрдЦрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдлрд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред

рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЧрдП рдереЗ:

 cd /opt/LibrePCB mkdir build && cd build qmake -r ../librepcb.pro pvs-studio-analyzer trace -- make -j2 pvs-studio-analyzer analyze -l /mnt/Share/PVS-Studio.lic -r /opt/LibrePCB \ -o /opt/LibrePCB/LibrePCB.log -v -j4 cp -R -L -a /opt/LibrePCB /mnt/Share 

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

рдХреАрдбрд╝реЗ рдорд┐рд▓реЗ


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

  1. рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЬреАрдПрдирдпреВ рдЖрд░реНрдо рдПрдВрдмреЗрдбреЗрдб рдЯреВрд▓рдЪрд┐рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИ ;
  2. PVS-Studio: MISRA C рдФрд░ MISRA C ++ рдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ ред

рд╢реБрджреНрдзрд┐рдкрддреНрд░


 SymbolPreviewGraphicsItem::SymbolPreviewGraphicsItem( const IF_GraphicsLayerProvider& layerProvider, const QStringList& localeOrder, const Symbol& symbol, const Component* cmp, const tl::optional<Uuid>& symbVarUuid, const tl::optional<Uuid>& symbVarItemUuid) noexcept { if (mComponent && symbVarUuid && symbVarItemUuid) .... if (mComponent && symbVarItemUuid && symbVarItemUuid) // <= .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V501 CWE-571 рдмрд╛рдИрдВ рдФрд░ 'рдСрдкрд░реЗрдЯрд░' рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рд╕рдорд░реВрдк рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ 'symbVarItemUuid' рд╣реИрдВред рд╕рд┐рдВрдмрд▓рд╡реНрдпреВрдЧреНрд░рд╛рдлрд┐рдХреНрд╕рд┐рдЯреЗрдоред рд╕реАрдкреА 74

рдХреНрд▓рд╛рд╕рд┐рдХ рдЯрд╛рдЗрдкреЛ: рд╡реЗрд░рд┐рдПрдмрд▓ рд╕рд┐рдореНрдмреНрд░рд╛рдпрдЯрд┐рдореНрдпреВрдб рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рджреЛ рдмрд╛рд░ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред рдКрдкрд░ рдПрдХ рд╕рдорд╛рди рдЪреЗрдХ рд╣реИ, рдФрд░ рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЪреЗрдХ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреВрд╕рд░реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ symbVarUuid рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯрд╛рдЗрдкреЛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ:

 void Clipper::DoMaxima(TEdge *e) { .... if (e->OutIdx >= 0) { AddOutPt(e, e->Top); e->OutIdx = Unassigned; } DeleteFromAEL(e); if (eMaxPair->OutIdx >= 0) { AddOutPt(eMaxPair, e->Top); // <= eMaxPair->OutIdx = Unassigned; } DeleteFromAEL(eMaxPair); .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V778 CWE-682 рджреЛ рд╕рдорд╛рди рдХреЛрдб рдЯреБрдХрдбрд╝реЗ рдкрд╛рдП рдЧрдПред рд╢рд╛рдпрдж, рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ рдФрд░ 'eMaxPair' рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ 'e' рдХреЗ рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрд▓рд┐рдкрд░ 29pp 2999

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХреЛрдб рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд╛рда рдХреЗ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдирд┐рд░реАрдХреНрд╖рдг рдХреЗ рдХрд╛рд░рдг, рд╡реЗ e- axPair-> рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рде e-> рд╢реАрд░реНрд╖ рдХреЛ рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдПред

рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ


 static int rndr_emphasis(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) { if (!content || !content->size) return 0; HOEDOWN_BUFPUTSL(ob, "<em>"); if (content) hoedown_buffer_put(ob, content->data, content->size); HOEDOWN_BUFPUTSL(ob, "</em>"); return 1; } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V547 CWE-571 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд╕рд╛рдордЧреНрд░реА' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддреА рд╣реИред html.c 162

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

рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐:

 void Clipper::DoMaxima(TEdge *e) { .... else if( e->OutIdx >= 0 && eMaxPair->OutIdx >= 0 ) { if (e->OutIdx >= 0) AddLocalMaxPoly(e, eMaxPair, e->Top); DeleteFromAEL(e); DeleteFromAEL(eMaxPair); } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V547 CWE-571 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'e-> OutIdx> = 0' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред рдХреНрд▓рд┐рдкрд░ 29pp 2983

рд░реАрдЪреЗрдХрд┐рдВрдЧ (e-> OutIdx> = 0) рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЪрд░ e-> рд╢реАрд░реНрд╖ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдХреВрдмрдбрд╝ рд╣реИред рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :)ред

рдФрд░ рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛:

 QString SExpression::toString(int indent) const { .... if (child.isLineBreak() && nextChildIsLineBreak) { if (child.isLineBreak() && (i > 0) && mChildren.at(i - 1).isLineBreak()) { // too many line breaks ;) } else { str += '\n'; } } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V571 CWE-571 рдЖрд╡рд░реНрддреА рдЬрд╛рдБрдЪред 'Child.isLineBreak ()' рд╕реНрдерд┐рддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЗрди 208 рдореЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХреА рдЧрдИ рдереАред sexpression.cpp 209

рддрд░реНрдХ рдореЗрдВ рддреНрд░реБрдЯрд┐


 void FootprintPreviewGraphicsItem::paint(....) noexcept { .... for (const Circle& circle : mFootprint.getCircles()) { layer = mLayerProvider.getLayer(*circle.getLayerName()); if (!layer) continue; // <= if (layer) { // <= pen = QPen(....); painter->setPen(pen); } else painter->setPen(Qt::NoPen); .... } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V547 CWE-571 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдкрд░рдд' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддреА рд╣реИред footprintpreviewgraphicsitem.cpp 177

рдЪреВрдВрдХрд┐ рджреВрд╕рд░реЗ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╣рдореЗрд╢рд╛ рдХрдерди рд╕рддреНрдп рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рдХрднреА рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рднреВрд▓ рдЧрдП рдкреЙрдЗрдВрдЯрд░ рдЪреЗрдХ


 extern int ZEXPORT unzGetGlobalComment ( unzFile file, char * szComment, uLong uSizeBuf) { .... if (uReadThis>0) { *szComment='\0'; if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis) return UNZ_ERRNO; } if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) *(szComment+s->gi.size_comment)='\0'; .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V595 CWE-476 'szComment' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 2068, 2073ред unzip.c 2068

рдпрджрд┐ uReadThis> 0 рд╣реИ , рддреЛ szComment рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдбрд┐рд░реЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рдЦрддрд░рдирд╛рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реВрдЪрдХ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕ рддрдереНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдРрд╕рд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдЗрд╕ рд╕реВрдЪрдХ рдХреЛ рд╕рдорд╛рдирддрд╛ NULL рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдирд╛рд░рдХреНрд╖рд┐рдд рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп


 template <class T> class Edge { public: using VertexType = Vector2<T>; Edge(const VertexType &p1, const VertexType &p2, T w=-1) : p1(p1), p2(p2), weight(w) {}; // <= Edge(const Edge &e) : p1(e.p1), p2(e.p2), weight(e.weight), isBad(false) {}; Edge() : p1(0,0), p2(0,0), weight(0), isBad(false) {} VertexType p1; VertexType p2; T weight=0; bool isBad; }; 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V730 CWE-457 рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЖрд░рдВрднрд┐рдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдХрд┐рдирд╛рд░реЗред резрек

рдкрд╣рд▓реЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдЖрдЗрд╕рдмреИрдб рдХреНрд▓рд╛рд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдкрд╣рд▓рд╛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдмрд╕ рдЧрд▓рддреА рд╕реЗ рдпрд╣ рдЖрд░рдВрднреАрдХрд░рдг рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред рдирддреАрдЬрддрди, рдкрд╣рд▓рд╛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдПрдХ рдЕрдкреВрд░реНрдг рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡


 template <typename ElementType> void ProjectLibrary::loadElements(....) { .... ElementType* element = new ElementType(elementDir, false); // can throw if (elementList.contains(element->getUuid())) { throw RuntimeError( __FILE__, __LINE__, QString(tr("There are multiple library elements with the same " "UUID in the directory \"%1\"")) .arg(subdirPath.toNative())); } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V773 CWE-401 рдЕрдкрд╡рд╛рдж рдХреЛ 'рддрддреНрд╡' рдкреЙрдЗрдВрдЯрд░ рдЬрд╛рд░реА рдХрд┐рдП рдмрд┐рдирд╛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╕рдВрднрд╡ рд╣реИред Projectlibrary.cpp 245

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

рдЕрдорд╛рдиреНрдп рдЕрдкрд╡рд╛рдж рдкреНрд░рдХрд╛рд░


 bool CmdRemoveSelectedSchematicItems::performExecute() { .... throw new LogicError(__FILE__, __LINE__); .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V1022 CWE-755 рдПрдХ рдЕрдкрд╡рд╛рдж рд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред cmdremoveselectedschematicitems.cpp 143

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

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдирдпрд╛ рдСрдкрд░реЗрдЯрд░ рджреБрд░реНрдШрдЯрдирд╛ рджреНрд╡рд╛рд░рд╛ рдпрд╣рд╛рдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИ рдХрд┐ рдЗрд╕ рддрдереНрдп рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдпрд╣ рдХрд╣рддрд╛ рд╣реИ:

 throw LogicError(__FILE__, __LINE__); 

рдбрд╛рдпрдирд╛рдорд┐рдХ_рдХрд╛рд╕реНрдЯ рдХрд╛ рдЦрддрд░рдирд╛рдХ рдЙрдкрдпреЛрдЧ


 void GraphicsView::handleMouseWheelEvent( QGraphicsSceneWheelEvent* event) noexcept { if (event->modifiers().testFlag(Qt::ShiftModifier)) .... } bool GraphicsView::eventFilter(QObject* obj, QEvent* event) { .... handleMouseWheelEvent(dynamic_cast<QGraphicsSceneWheelEvent*>(event)); .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V522 CWE-628 рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 'рдШрдЯрдирд╛' рдХреА Dereferencing рд╣реЛ рд╕рдХрддреА рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рдирд▓ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'handleMouseWheelEvent' рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 143, 252. рдЧреНрд░рд╛рдлрд┐рдХреНрд╕рд╡реНрдпреВ.рдкреАрд╕реА 143

рдбрд╛рдпрдирд╛рдорд┐рдХ_рдХрд╛рд╕реНрдЯ рдСрдкрд░реЗрдЯрд░ рд╕реЗ рдЙрддреНрдкрдиреНрди рдкреЙрдЗрдВрдЯрд░рдорд╛рдЙрдерд╡реНрд╣реАрд▓рд╡реЗрдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рдЗрд╕ рд╕реВрдЪрдХ рдХреЛ рдкреВрд░реНрд╡ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд┐рдирд╛ dereferenced рд╣реИред

рдпрд╣ рдЦрддрд░рдирд╛рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбрд╛рдпрдиреЗрдорд┐рдХ_рдХрд╛рд╕реНрдЯ рдСрдкрд░реЗрдЯрд░ nullptr рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рд╕рд┐рд░реНрдл рддреЗрдЬ static_cast рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИред

рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреЙрдЗрдВрдЯрд░ рдЪреЗрдХ рдХреЛ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рдмрд╣реБрдд рдЖрдо рд╣реИ:

 bool GraphicsView::eventFilter(QObject* obj, QEvent* event) { .... QGraphicsSceneMouseEvent* e = dynamic_cast<QGraphicsSceneMouseEvent*>(event); Q_ASSERT(e); if (e->button() == Qt::MiddleButton) .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V522 CWE-690 рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдирд▓ рдкреЙрдЗрдВрдЯрд░ 'e' рдХреА рдбреНрд░реАрдлрд░рд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред graphicsview.cpp 206

рд╕реВрдЪрдХ рдХреЛ Q_ASSERT рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рд╡рд░реНрдгрди рд╣реИ:
рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдЭреВрдард╛ рд╣реИ рддреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рдпреБрдХреНрдд рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред

Q_ASSERT () рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдкреВрд░реНрд╡ рдФрд░ рдмрд╛рдж рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди QT_NO_DEBUG рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

Q_ASSERT рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреБрд░рд╛ рддрд░реАрдХрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ QT_NO_DEBUG рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓рд┐рдмреНрд░реЗрдкреАрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЪреАрдЬреЗрдВ рдХреИрд╕реА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ QT_NO_DEBUG рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЕрдЬреАрдм рдФрд░ рдЧреИрд░-рдорд╛рдирдХ рд╕рдорд╛рдзрд╛рди рд╣реИред

рдпрджрд┐ рдореИрдХреНрд░реЛ рд╢реВрдиреНрдп рдореЗрдВ рдлреИрд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдирд╣реАрдВ рд╣реИред рдФрд░ рдлрд┐рд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбрд╛рдпрдиреЗрдорд┐рдХ_рдХрд╛рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВред Static_cast рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ?

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдХреЛрдб рдЧрдВрдзрд╣реАрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рднреА рд╕рдорд╛рди рдХреЛрдб рдЕрдВрд╢реЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рд╡рд╣рд╛рдБ, рд╡реИрд╕реЗ рднреА, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╣реИрдВред рдореИрдВрдиреЗ рдРрд╕реЗ рд╣реА casesреи рдорд╛рдорд▓реЗ рдЧрд┐рдирд╛рдП!

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


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



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

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


All Articles