
PVS-Studio áá˝á˛ááźááşá¸á
áááşááźáŹáážáŻááᯠáĄááŻáśá¸ááźáŻááźááşá¸áĄáá˝ááş áááşáážááĄááźáąáĄááąááťáŹá¸áá˛áážáá
áşááŻáážáŹ CI á
áá
áşááťáŹá¸áážááˇáş ááąáŤááşá¸á
ááşá¸ááźááşá¸ááźá
áşááŤáááşá PVS-Studio áááąáŹááťááşáá
áşááŻáĄáŹá¸ á
ááşáááşáááźááşááąáŤááşá¸á
ááşá¸áážáŻá
áá
áşááŽá¸ááŤá¸ááž áá˝á˛ááźááşá¸á
áááşááźáŹáážáŻáĄááťááŻáˇááᯠáĄááááˇáşááąá¸ááŻáśáĄáááşá¸áááşááźááˇáş áááşááąáŹááşáááŻááşááąáŹáşáááşá¸ á¤ááŻááşáááşá¸á
ááşááᯠáááŻáááŻáĄáááşááźáąá
áąáááş ááťá˝ááşáŻááşáááŻáˇ áááşáááşááŻááşááąáŹááşááŤáááşá PVS-Studio áááş áááŻáĄá፠áá˝á˛ááźááşá¸á
áááşááźáŹáážáŻáĄáá˝ááşáĄáŹá¸ TeamCity - TeamCity á
á
áşááąá¸ááąá¸áĄááťááŻá¸áĄá
áŹá¸áĄáá˝ááş ááąáŹáşáááşáĄááźá
áşáááŻáˇ ááźáąáŹááşá¸áá˛áááşáĄáá˝ááş ááśáˇáááŻá¸áážáŻáážáááŤáááşá áááşáááŻáĄááŻááşááŻááşáᲠááźááˇáşááĄáąáŹááşá
áĄááŻáśá¸ááźáŻáá˛áˇááąáŹáˇááşáá˛áá˛áˇáááşáááşáá˛áˇáĄááťááşáĄáááş
â áĄááťááŻá¸ááťááŻá¸ááąáŹáĄáážáŹá¸ááťáŹá¸áááŻáážáŹáá˝áąááźááşá¸áážááˇáşááźáŻááźááşááźááşá¸ááŻááşáááşá¸ááŹáááşáááŻáá˝ááşáá°ááťáąáŹáá˝áąáˇá áąáááşááŽáááŻááşá¸ááźáŻááŻááşááŹá¸ááąáŹ C, C++, C# áážááˇáş Java ááŻááşááťáŹá¸ááááşááźáááşááąáŹáá˝á˛ááźááşá¸á áááşááźáŹáá°á áá˝á˛ááźááşá¸á áááşááźáŹáá°áĄáŹá¸ Windowsá Linux áážááˇáş macOS áááŻáˇáá˝ááş áĄááŻáśá¸ááźáŻáááŻááşáááşá á¤ááąáŹááşá¸ááŤá¸áá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş áá˝á˛ááźááşá¸á áááşááźáŹáá°áááŻááşáááŻááşááŹáá áááşá¸áááźááˇáşááźá°á¸áážáŻááž áĄááŻáśá¸áááşáážáŻáĄááťááŻáˇáááŻáááşá¸ áááşááźá˝á á˝áŹáĄááŻáśá¸ááźáŻááŤáááşá
â compiler áá˝ážááˇáşáááşáážáŻááᯠá áąáŹááˇáşááźááˇáşá á áşááąá¸áááˇáş á áąáŹááˇáşááźááˇáşááŹááŹáá áşááŻááźá áşáááşá áááˇáşáááąáŹááťááşááᯠááááşááąáŹááşáᎠáááşá¸ááᯠááťááşááťááşá¸ááŻááşááąáŹááşáááŤáááşá snooping ááŻááşáá˝ááşá ááŹááŹáááş ááśáˇáááŻá¸ááąá¸ááŹá¸ááąáŹ compiler ááťáŹá¸áĄáŹá¸ááŻáśá¸á ááŻááşááąáŹááşááťááşááťáŹá¸ááᯠááźáŹá¸ááźááşáááşááźá áşáááşá ᤠutility ááᯠC/C++ áááąáŹááťááşááťáŹá¸áááŻáá˝á˛ááźááşá¸á áááşááźáŹáááşááŹáĄááŻáśá¸ááźáŻáááŻááşáááşáážáŹáážááşááŹá¸áááŻááşáááşá
- áá˝á˛ááźááşá¸á áááşááźáŹáážáŻáĄá áŽáááşááśá áŹááťáŹá¸ááᯠááá°ááŽááąáŹááąáŹáşáááşááťáŹá¸áĄááźá áşáááŻáˇ ááźáąáŹááşá¸áá˛ááźááşá¸áĄáá˝ááş áĄááŻáśá¸áááşáážáŻáá áşááŻá
áááąáŹááťááşáážááˇáşáááşáááşááąáŹ áĄááťááşáĄáááşááťáŹá¸ááᯠááąáˇááŹáááŻááşááŤáááşá
áááşáá˝áąáˇááá°ááŹáá áşááŻáá˝ááş á¤ááŻááşááąáŹááşááťááşááᯠá ááşá¸ááźááˇáşááźááŤá ááŻáˇ - OpenRCT2 áááąáŹááťááşááᯠáá˝á˛ááźááşá¸á áááşááźáŹááźááˇáşááźááŤá ááŻáˇá
- RollerCoaster Tycoon 2 (RCT2) ááááşá¸ááᯠááŻááşááąáŹááşááťááşáĄáá áşááťáŹá¸ááźááˇáş ááťá˛áˇáá˝ááşáᏠááťááŻáˇáá˝ááşá¸ááťááşááťáŹá¸ááᯠááźáŻááźááşááąá¸áááˇáş ááááşá¸ááᯠáá˝ááˇáşáááşá¸á á˝áŹ áĄááąáŹááşáĄáááşááąáŹáşááźááşá¸á ááááşá¸áá áŹá¸ááźááşá¸áááş á áŽá¸áááşá¸áážáŻááťáŹá¸á ááąá¸áááŻááşááťáŹá¸áážááˇáş áĄááąáŹááşáĄáŚááťáŹá¸ááŤáážáááąáŹ áĄáááşá¸ááźáąáĽááťáŹááşááᯠáááşááąáŹááşááźááşá¸áážááˇáş ááááşá¸ááááşá¸ááźááşá¸áááŻáˇááᯠáážááˇáşáááşáááşá áá áŹá¸áááŹá¸áááş á§ááˇáşáááşááťáŹá¸ááᯠááťáąáŹáşáá˝ážááşá áąáááşáážááˇáş áááşá¸ááźáśá ááŹáááşááąáŹááşá¸ááᯠááááşá¸ááááşá¸áᏠáĄááźááşáĄá á˝ááşá¸ááĄáąáŹááş ááźááŻá¸á áŹá¸ááááşááźá áşáááşá OpenRCT2 áááş áááˇáşáĄáŹá¸ ááŹááşáááşá¸ááťáŹá¸áážááˇáş sandbox áážá áşááŻááŻáśá¸áá˝ááş áá áŹá¸áááş áá˝ááˇáşááźáŻáááşá ááŹááşáááşá¸ááťáŹá¸áááş áá áŹá¸áááŹá¸áĄáŹá¸ áááşáážááşáĄááťáááşáĄáá˝ááşá¸ ááááťááąáŹááŻááşáááşá¸ááŹáááşáá áşááŻááźáŽá¸ááźáąáŹááşáááş áááŻáĄááşááąáŹáşáááşá¸ Sandbox áááş áá áŹá¸áááŹá¸áĄáŹá¸ áááˇáşáááşááťááşááťáŹá¸ áááŻáˇáááŻááş áá˝áąááźáąá¸áá áşá áŻáśáá áşááŹááážááᲠáááŻáááŻááźáąáŹááşá¸áá˝ááşááźááşáá˝ááşáážáááąáŹáááşá¸ááźáśááᯠáááşááąáŹááşáááŻááşá áąááŤáááşá
áááˇáşáĄáąáŹááşááŻááşááźááşá¸
áĄááťáááşááŻááşáááşááŹáááşáĄáá˝ááşá ááťá˝ááşáŻááşáááş ááťá˝ááşáŻááşááá˝ááşááźá°ááŹáá˝ááş TeamCity ááŹááŹááᯠááŻááşááąáŹááşááąáááˇáşáĄááťáááşááž á áááşá áááşáááşááźááşá¸ááŻááşáááşá¸á ááşááᯠááťáąáŹáşáá˝áŹá¸ááąáááşá ááťá˝ááşáŻááşáááŻáˇáááş - localhost:{áááşáááşááźááşá¸ááŻááşáááşá¸á ááşáĄáá˝ááşá¸ áááşáážááşááŹá¸ááąáŹ ááááşáááşá¸} (ááťá˝ááşáŻááşáááá ášá áá˝ááşá localhost:9090) áááŻáˇáá˝áŹá¸á áá˝ááˇáşááźáŻááťááşááąááŹááᯠáááˇáşááŤá áááşááźáŽá¸ááąáŹááş ááťá˝ááşáŻááşáááŻáˇáĄáŹá¸ áážáŻááşáááşááŤáááşá

Create Project áááŻááşááᯠáážáááşááŤá áááŻáˇááąáŹááş Manually áááŻáá˝áąá¸ááťááşááźáŽá¸ áá˝ááşáááşááťáŹá¸ááᯠááźááˇáşá
á˝ááşááŤá

áááŻááşáááŻáážáááşááźáŽá¸ááąáŹááş áááşááŽá¸áááşáááşááťáŹá¸ááźááˇáş ááźáááşá¸ááąáŤááşááž ááźááŻáááŻááŤáááşá

áážáááşááźááˇáşááĄáąáŹááş áááşááąáŹááşáážáŻááŻáśá
áśááᯠáááşááŽá¸ááŤá.

áá˝ááşáááşááťáŹá¸áááŻááźááˇáşááźáŽá¸ ááá
áşáážáááşááŤá áááşááŽá¸. ááŹá¸áážááşá¸ááááşá¸ááťáŻááşáážáŻá
áá
áşááᯠáá˝áąá¸ááťááşáááş áááˇáşáĄáŹá¸ ááąáŹááşá¸áááŻááąáááˇáş áááşá¸áááŻá¸áá
áşááŻááᯠááťá˝ááşáŻááşáááŻáˇáá˝áąáˇááźááşááááşá áĄáááşá¸áĄááźá
áşááťáŹá¸áááş ááąááĄáááŻááş áááşáážáááąááźáŽááźá
áşááąáŹááźáąáŹááˇáşá áážáááşááŤá ááźááŻá¸ááŻááş.

ááąáŹááşááŻáśá¸áá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş áááąáŹááťááşáááşáááşááťáŹá¸áááŻáˇ áááşáá˝áŹá¸ááŤá

á
áŻá
ááşá¸áážáŻ áĄáááˇáşááťáŹá¸ááᯠááąáŤááşá¸áááˇáşááźááŤá
ááŻáˇá Build áĄáááˇáşááťáŹá¸ -> áááşááąáŹááşáážáŻáĄáááˇáşááᯠáááˇáşááŤá.

á¤ááąááŹáá˝ááş ááťá˝ááşáŻááşáááŻáˇ áá˝áąá¸ááťááşáááş-
- Runner áĄááťááŻá¸áĄá áŹá¸ -> Command Line
- Run -> Custom Script áááŻáá˝ááˇáşááŤá
áááąáŹááťááşá áŻá ááşá¸áážáŻáĄáá˝ááşá¸ ááťá˝ááşáŻááşáááŻáˇáááş áá˝á˛ááźááşá¸á áááşááźáŹáážáŻááᯠááŻááşááąáŹááşáááşááźá áşááąáŹááźáąáŹááˇáş á áŻá ááşá¸áážáŻáážááˇáş áá˝á˛ááźááşá¸á áááşááźáŹáážáŻáááş áĄáááˇáşáá áşáááˇáşááźá áşáááˇáşááąáŹááźáąáŹááˇáş áá˝ááşáááşáá˝ááş ááźááˇáşá á˝ááşááŤá á áááşááźááŻááş Script:

ááąáŹááşáááŻááşá¸áá˝ááş áá
áşáŚá¸ááťááşá¸ áĄáááˇáşááťáŹá¸ááᯠááźááˇáşááŤáááşá áá˝á˛ááźááşá¸á
áááşááźáŹáá°áĄáŹá¸ áááşááźááşá¸á áááąáŹááťááşááᯠá
áŻá
ááşá¸ááźááşá¸á áá˝á˛ááźááşá¸á
áááşááźáŹááźááşá¸á áĄá
áŽáááşááśá
áŹááᯠááŻááşááąá¸ááźááşá¸áážááˇáş ááąáŹáşáááşááťááźááşá¸áááŻáˇáááş ááŻááş áááˇáşáá
áşáááŻááşá¸áᏠáá°áááş áĄááąá¸ááźáŽá¸ááŤáááşá
ááąáŹááşááŻáśá¸ááŻááşááážáŹá Environment variable áá˝áąááᯠáááşáážááşááźáŽá¸ áá°áááŻáˇáá˛áˇ áááşáážáŻáááŻááşáážáŻááᯠááźážááˇáşáááşáááŻáˇ áááşá¸áááşá¸áááťááŻáˇááᯠááąáŹáşááźááąá¸ááŹá¸ááŤáááşá ááŤáááŻááŻááşáááŻáˇá áááşáá˝áŹá¸ááźááĄáąáŹááş- áááˇáşáááşááťááşááťáŹá¸ -> ááŤááŹááŽááŹáĄáá áşáááˇáşááŤá áážááˇáş variable ááŻáśá¸ááŻááąáŤááşá¸áááˇáşááŤá

áááşááŻááşáááşáážáŹáááŻááşáááŻáážáááşááŤá áá˝áąá¸áážáŹá¸ ááŹáááşáĄááąáŤáşááąáŹááˇáşáážáŹá áááąáŹááťááşááᯠá
áŻá
ááşá¸ááźáŽá¸ áá˝á˛ááźááşá¸á
áááşááźáŹááąááťáááşáážáŹ ááŹááşáá˝ážááşá¸áĄááźáąáŹááşá¸ ááźáąáŹááźáááşá
áááŻááşáááŻááşáá˛ááťá
áŚá¸á á˝áŹá ááťá˝ááşáŻááşáááŻáˇáááş ááąáŹááşááŻáśá¸ááąáŤáş PVS-Studio ááźááˇáşááźá°á¸áážáŻááᯠááąáŤááşá¸ááŻááşááŻááşáááş áááŻáĄááşáááşá áááşá¸áĄáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş Chocolatey áááşááąáˇááťáşáááşááąááťáŹááᯠáĄááŻáśá¸ááźáŻááŤáááşá ááŽáĄááźáąáŹááşá¸ááᯠáááŻááááťááşáá°áá˝áąáĄáá˝ááşááąáŹáˇ áááşáááŻááşááŹáá áşááŻáážáááŤáááşá :
choco install pvs-studio -yáááŻáˇááąáŹááşá CLMonitor áááąáŹááťááşáááşááąáŹááşááźáąááŹááśááźááşá¸ utility áááŻáá˝ááˇáşááźááŤá ááŻáˇá
%CLmon% monitor â-attacháááŻáˇááąáŹááş ááťá˝ááşáŻááşáááŻáˇáááş áááąáŹááťááşááᯠáááşáááşá¸ ááťááşááźáąáŹááşá¸áá˛áážáŻáĄááźá áş áááşááąáŹááşááŤáááşá MSB ááŤáááşááąáŹááşáááşáááŻáĄááşááąáŹ MSBuild ááŹá¸áážááşá¸áááŻáˇáááşá¸ááźáąáŹááşá¸ááźá áşáááşá
%MSB% %ProjPath% /t:clean
%MSB% %ProjPath% /t:rebuild /p:configuration=release
%MSB% %ProjPath% /t:g2
%MSB% %ProjPath% /t:PublishPortablePVS-Studio áĄáá˝ááş áĄááąáŹááˇáşáááşááźááşá¸áážááˇáş áááŻááşá ááşááŽá¸ááᯠáááˇáşááźááŤá ááŻáˇá
%PVS-Studio_cmd% credentials --username %PVS_Name% --serialNumber %PVS_Key%áááşááąáŹááşáážáŻááźáŽá¸áá˝áŹá¸ááąáŹáĄááŤá ááźááŻáááşááŻááşááąáŹááşááźáŽá¸ááŹá¸áááŻááşááťáŹá¸áážááˇáş static áá˝á˛ááźááşá¸á áááşááźáŹáážáŻááᯠáááşááŽá¸áááşáĄáá˝ááş CLMonitor ááᯠáááşááśááŻááşááąáŹááşááŤá
%CLmon% analyze -l "c:ptest.plog"áááŻáˇááąáŹááş ááťá˝ááşáŻááşáááŻáˇá ááźááˇáşááźá°á¸áážáŻááž áĄááźáŹá¸ááąáŹ áĄááŻáśá¸áááşáážáŻááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻááŤáááşá PlogConverter áááş áĄá áŽáááşááśá áŹááᯠá áśááąáŹáşáááşááž TeamCity ááŽá¸áááˇáşááąáŹáşáááşáááŻáˇ ááźáąáŹááşá¸áááşá áááşá¸áááŻááťáąá¸áá°á¸áááşááŤáááşá áááşá¸ááᯠbuild window áá˝ááş áááŻááşáááŻááşááźááˇáşáážáŻáááŻááşáááşááźá áşáááşá
%PlogConverter% "c:ptest.plog" --renderTypes=TeamCity -o "C:temp"ááąáŹááşááŻáśá¸áĄáááˇáşáážáŹ ááąáŹáşáááşááŻááşááŹá¸ááąáŹ áĄá áŽáááşááśá áŹááᯠááźááááşááźá áşáááşá áááTeamCity parser ááž ááąáŹááşáá°áááˇáşááąááŹáá˝ááşá
type "C:tempptest.plog_TeamCity.txt"ááŹááşáá˝ážááşá¸ááŻááşáĄááźááˇáşáĄá áŻáś-
choco install pvs-studio -y
%CLmon% monitor --attach
set platform=x64
%MSB% %ProjPath% /t:clean
%MSB% %ProjPath% /t:rebuild /p:configuration=release
%MSB% %ProjPath% /t:g2
%MSB% %ProjPath% /t:PublishPortable
%PVS-Studio_cmd% credentials --username %PVS_Name% --serialNumber %PVS_Key%
%CLmon% analyze -l "c:ptest.plog"
%PlogConverter% "c:ptest.plog" --renderTypes=TeamCity -o "C:temp"
type "C:tempptest.plog_TeamCity.txt"á¤áĄááąáŹáĄáá˝ááşá¸á áááąáŹááťááşá á ááşá¸ááąá¸áá˝á˛áážááˇáş áá˝á˛ááźááşá¸á áááşááźáŹáážáŻ áĄáąáŹááşááźááşá á˝áŹ ááźáŽá¸áá˝áŹá¸áááźááˇáş áááşááşáááŻáˇ áá˝áŹá¸áááŻááşááŤáááşá á áŽááśááááşá¸ááťáŹá¸ ááąááťáŹáĄáąáŹááşááŻááşááŤá

áᲠáážáááşáááŻááşááźááĄáąáŹááş á
áŻá
áŻááąáŤááşá¸á
á
áşááąá¸ááźááşá¸ááá˝á˛ááźááşá¸á
áááşááźáŹáá° áĄá
áŽáááşááśá
áŹááᯠááźááˇáşáážáŻáááş-

áááááąá¸ááťááşááťáŹá¸ááᯠááąáŹááŤáážáŹáá˝áąááąá¸á
ááşá¸ááťááşá¸ááśááŤááşááťáŹá¸ááźááˇáş áĄáŻááşá
áŻáá˝á˛áˇááŹá¸áááşá ááŻááşáááŻááźááşá áá˝áŹá¸ááŹáááş áááááąá¸ááťááşááźááˇáş áááŻááşá¸ááśááŤááşááᯠáážáááşáááŤáááşá ááŹáááşáĄááąáŤáşááąáŹááˇáşáážá ááąá¸áá˝ááşá¸áĄáážááşáĄááŹá¸ááᯠáážáááşááźááşá¸ááźááˇáş á
áŹáá˝ááşá
áŹáááşá¸ááťáŹá¸ááŤáážáááąáŹ áááşááşáĄáá
áşáá
áşááŻááᯠáááˇáşáĄáŹá¸ áá˝ááˇáşááąá¸áááşááźá
áşáááşá áá˝á˛ááźááşá¸á
áááşááźáŹáážáŻáááááąá¸ááťááşááźááˇáş áááŻááşá¸ááśááŤááşááąáŤáşáá˝ááş áážáááşááźááşá¸ááźááˇáş áááşáááş ááŻááşáážáá
áşáááˇáş áá˝áŹá¸ááŹáááŻááşáááşá áĄááŻáśá¸ááźáŻáááˇáşáĄá፠áĄááąá¸ááááşá¸áá˝ááşááźá°ááŹááž áááşá¸ááźáąáŹááşá¸ááźáááŻááşáááşá áĄáááşá¸áĄááźá
áşTreeRoot áĄáážááşáĄááŹá¸á áá˝á˛ááźááşá¸á
áááşááźáŹáá°á á¤ááŻááşááąáŹááşáážáŻááŻáśá
áśááᯠá
áááşáááşá
áŹá¸áá° áááşáá°áááᯠáááşáááŻááşááŹááášááážááˇáş áááşá¸áážáŽá¸áááŻááşááŤáááşá .
áá˝á˛ááźááşá¸á áááşááźáŹáá°áááááşááťáŹá¸áááŻááźááˇáşáážáŻááźááşá¸á
ááᯠáááşááąáŹááşáážáŻáĄáŹá¸ ááźááˇáşááťááşááźáŽá¸ ááźááşáááşáááşáážááşááźááşá¸ ááźáŽá¸áááşáážááˇáşá ááťá˝ááşáŻááşáááŻáˇ ááźááˇáşáážáŻááąáááˇáş áááąáŹááťááşáá˝ááş áá˝áąáˇáážáááááˇáş á áááşáááşá áŹá¸áá˝ááş áááááąá¸ááťááşáĄááťááŻáˇááᯠááźááˇáşááŤá
áááááąá¸ááťááş N1
[CWE-401] 'ááááş' áá˝ážááşááźááťááşááᯠáááŻááşáᲠááźá˝ááşá¸ááťááşáĄáŹá¸ áááşáážáŹá¸áá˛áˇáááşá Memory áááŻá áááˇáşáážáŻááźá áşáááŻááşáááşá libopenrct2 ObjectFactory.cpp ááá
Object* CreateObjectFromJson(....)
{
Object* result = nullptr;
....
result = CreateObject(entry);
....
if (readContext.WasError())
{
throw std::runtime_error("Object has errors");
}
....
}
Object* CreateObject(const rct_object_entry& entry)
{
Object* result;
switch (entry.GetType())
{
case OBJECT_TYPE_RIDE:
result = new RideObject(entry);
break;
case OBJECT_TYPE_SMALL_SCENERY:
result = new SmallSceneryObject(entry);
break;
case OBJECT_TYPE_LARGE_SCENERY:
result = new LargeSceneryObject(entry);
break;
....
default:
throw std::runtime_error("Invalid object type");
}
return result;
}áááşáááŻááŽááᯠáááŻááşá¸ááá áşáá˝á˛ááąááąá¸ááźáŽá¸ááąáŹááş áá˝á˛ááźááşá¸á áááşááźáŹáá°áááş áĄáážáŹá¸áá áşááŻááᯠáááááźáŻáááááşá CreateObjectááźá˝ááşá¸ááťááşáá áşáᯠááźá áşááąáŤáşááąáŹáĄááŤá áážááşááŹááşááᯠááážááşá¸áááşá¸áá˛á áážááşááŹááşáááŻá áááˇáşáážáŻ ááźá áşááąáŤáşáááşá
áááááąá¸ááťááş N2
'|' á áááşáááşáážááˇáş ááŹáááşáá˝ááş '(1ULL << WIDX_MONTH_BOX)' áážááˇáş áááşáá°áááşááťážááąáŹ á ááŹá¸áááşááťáŹá¸ áážáááŤáááşá áĄáąáŹáşáááąááŹá libopenrct2ui Cheats.cpp ááá
static uint64_t window_cheats_page_enabled_widgets[] =
{
MAIN_CHEAT_ENABLED_WIDGETS |
(1ULL << WIDX_NO_MONEY) |
(1ULL << WIDX_ADD_SET_MONEY_GROUP) |
(1ULL << WIDX_MONEY_SPINNER) |
(1ULL << WIDX_MONEY_SPINNER_INCREMENT) |
(1ULL << WIDX_MONEY_SPINNER_DECREMENT) |
(1ULL << WIDX_ADD_MONEY) |
(1ULL << WIDX_SET_MONEY) |
(1ULL << WIDX_CLEAR_LOAN) |
(1ULL << WIDX_DATE_SET) |
(1ULL << WIDX_MONTH_BOX) | // <=
(1ULL << WIDX_MONTH_UP) |
(1ULL << WIDX_MONTH_DOWN) |
(1ULL << WIDX_YEAR_BOX) |
(1ULL << WIDX_YEAR_UP) |
(1ULL << WIDX_YEAR_DOWN) |
(1ULL << WIDX_DAY_BOX) |
(1ULL << WIDX_DAY_UP) |
(1ULL << WIDX_DAY_DOWN) |
(1ULL << WIDX_MONTH_BOX) | // <=
(1ULL << WIDX_DATE_GROUP) |
(1ULL << WIDX_DATE_RESET),
....
};static áá˝á˛ááźááşá¸á áááşááźáŹáá°áážáá˝á˛á áĄááźáŹá¸áá°áĄáááşá¸áááşá á¤áĄáŹááŻáśá á°á¸á ááŻááşáážáŻá ááşá¸áááşáážáŻááᯠáĄáąáŹááşááźááşáááŻááşáááşá á¤ááąáŹáşááŽáá°á¸áááˇáşááŹá¸ááąáŹ áĽáááŹáááş á¤áĄááźáąáŹááşá¸ááźáąáŹááˇáş áĄáááĄááť ááąáŹááşá¸ááŤáááşá
áááááąá¸ááťááşááťáŹá¸ N3
'RCT12BannerElement' áážáááşá¸áááşááŹááąáŹáĄáááşá¸áážá 'áĄááśááťáŹá¸' áĄáá˝ááşáááş áĄááźáąááśáĄáááşá¸ 'RCT12TileElementBase' áá˝ááş áĄáá˝ááşááᯠáááşááąá¸áááşáážáŹ áá°á¸áááşá¸ááŤáááşá áááŻááşá¸ááťáŹá¸ááᯠá á áşááąá¸ááŤ- RCT12.h:570á RCT12.h:259á libopenrct2 RCT12.h 570
struct RCT12SpriteBase
{
....
uint8_t flags;
....
};
struct rct1_peep : RCT12SpriteBase
{
....
uint8_t flags;
....
};ááŻááşááŤáááşá base class áá˛áˇ descendant áážáŹ ááŹáááşáá°áá˛áˇ variable áááŻááŻáśá¸ááŹá áĄááźá˛áááşá¸ error áááŻááşááŤáá°á¸á áááŻáˇááŹáá˝ááşá áĄáá˝áąáááşááśááźááşá¸áááşá¸áááŹáááŻááşáááŻááşá ááááĄáááşá¸áĄá áŹá¸á áááşáááşáĄáŹá¸ááŻáśá¸áááş áááąá¸áĄáááşá¸áĄá áŹá¸áá˝ááş áážáááąáááşáᯠáá°ááááşá áĄáá˝áąáááşááśáá°áá˝ááş áĄáááşáá° áááşáááşááťáŹá¸ááᯠááźáąááŹááźááşá¸ááźááˇáş ááťá˝ááşáŻááşáááŻáˇáááş áážáŻááşáá˝áąá¸áážáŻááťáŹá¸ááᯠááááşáááşááąá¸áááşá
áááááąá¸ááťááş N4
'imageDirection / 8' ááźáąááŹááťááşá ááááşáááş áĄááźáąáĄááąá áĄá áááşáĄáááŻááşá¸áá áşááŻááźá áşááźáąáŹááşá¸ áá°á¸áááşá¸ááŤáááşá á¤ááąáŹáşááźááťááşáĄáŹá¸ áĄááźáŹá¸áĄááŹááťáŹá¸áážááˇáş áážááŻááşá¸áážááşááźááˇáşáááˇáşáááşá libopenrct2 ObservationTower.cpp áá
void vehicle_visual_observation_tower(...., int32_t imageDirection, ....)
{
if ((imageDirection / 8) && (imageDirection / 8) != 3)
{
....
}
....
}áĄááŽá¸áááşááźááˇáşááźááŤá ááŻáˇá á ááŹá¸áááş ááŻáśáááşá¸áá˝ážááş/á áážáŹá¸áááş áážáŹá¸ááááˇáşáááşá ááŻáśáááşá¸áá˝ážááş áĄáá˝áŹáĄááąá¸ -7 ááž 7 áĄáá˝ááşá¸áážááááşá ááŻááááĄáááŻááşá¸- (imageDirection / 8) != á á á áşááąá¸áážáŻááťáŹá¸ ááŻáśáááşá¸áá˝ážááş áĄáááŻááşá¸áĄááźáŹá¸ááźááşáááźá áşááźááşá¸áĄáá˝ááş- -31 ááž -24 áážááˇáş 24 ááž ââ31 áĄááŽá¸ááŽá¸á á¤áááşá¸ááźááˇáş áĄááťááŻáˇááąáŹ áĄáááŻááşá¸áĄááźáŹá¸áá áşááŻáá˝ááş ááśááŤááşááťáŹá¸ááŤáááşááźááşá¸áĄáá˝ááş ááśááŤááşááťáŹá¸ááᯠá á áşááąá¸ááźááşá¸áááş ááťá˝ááşáŻááşáĄáá˝ááş áĄáá˝ááşáá°á¸áááşá¸ááŻáśáááźáŽá¸á á¤ááŻááşáĄáááŻááşá¸áá˝ááş áĄáážáŹá¸áĄáá˝ááşá¸ááážáááťážááşáááşá á¤áĄááźáąáĄááąááťáŹá¸ááᯠáááŻáááŻáážááşá¸áááşá¸á áąáááş ááźááşáááşááąá¸ááŹá¸áááş áĄááźáśááźáŻáááŻááŤáááşá áááşá¸áááş á¤ááŻááşáááŻáááşááźáŽá¸ ááááşá¸ááááşá¸ááŹá¸áá°ááťáŹá¸áĄáá˝ááş ááááᯠáááŻáááŻáá˝ááşáá°á áąáááşááźá áşáááşá
áááááąá¸ááťááş N5
á¤áá˛áˇáááŻáˇááąáŹ ááŹáááşááťáŹá¸á áá°á¸áááşá¸ááąáŹ áĄá áŽáĄá áĽáş- A = B; B = A; áááŻááşá¸ááťáŹá¸ááᯠá á áşááąá¸ááŤ- 1115á 1118. libopenrct2ui MouseInput.cpp 1118
void process_mouse_over(....)
{
....
switch (window->widgets[widgetId].type)
{
case WWT_VIEWPORT:
ebx = 0;
edi = cursorId; // <=
// Window event WE_UNKNOWN_0E was called here,
// but no windows actually implemented a handler and
// it's not known what it was for
cursorId = edi; // <=
if ((ebx & 0xFF) != 0)
{
set_cursor(cursorId);
return;
}
break;
....
}
....
}á¤ááŻááşáĄáááŻááşá¸áĄá ááᯠáá˝á˛ááźááşá¸á áááşááźáŹááźááşá¸ááźááˇáş ááážááááŻááşááźáąááťáŹá¸áááşá áááŻáˇááąáŹááş ááťááşáážáááąáŹ áážááşááťááşááźááˇáş áĄááŻáśá¸áĄááźááşááąá¸áᏠáĄááŻááşáááŻááşááąáŹááŻááşá áá áşá áááşáá áşáááŻááşá¸ááᯠáááşáážáŹá¸áá˛áˇáááşá áááŻáˇááąáŹáşáááşá¸ ááŻááşááąáŹááşááťááşáĄááťááŻáˇ ááťááşááąááąá¸áááşá cursorIdáĄáááášááŤááşáááşá¸ ááááşááážáááŤáá°á¸á
áááááąá¸ááťááş N6
[CWE-476] nullptr ááᯠá á áşááąá¸ááźáŽá¸ááąáŹááş 'áá áŹá¸áááŹá¸' áá˝ážááşááźááťááşááᯠááąá¸áááşá¸á á˝áŹ áĄááŻáśá¸ááźáŻáá˛áˇáááşá áááŻááşá¸ááťáŹá¸ááᯠá á áşááąá¸ááŤ- 2085, 2094. libopenrct2 Network.cpp 2094
void Network::ProcessPlayerList()
{
....
auto* player = GetPlayerByID(pendingPlayer.Id);
if (player == nullptr)
{
// Add new player.
player = AddPlayer("", "");
if (player) // <=
{
*player = pendingPlayer;
if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER)
{
_serverConnection->Player = player;
}
}
newPlayers.push_back(player->Id); // <=
}
....
}á¤ááŻááşáááş ááźááşáááşáĄááąáŹáşááąá¸áá˝ááşáá°áááşá áááşáááş áááşá¸ááᯠáááááĄááźáááş á á áşááąá¸áááş áááŻáĄááşááŤáááşá áá áŹá¸áá° null pointer áááŻáˇá áááŻáˇáááŻááş conditional statement á body áááŻáˇ áááˇáşááŤá ááŤááŻááá option áááŻáĄááźáśááźáŻááťááşááŤáááş:
void Network::ProcessPlayerList()
{
....
auto* player = GetPlayerByID(pendingPlayer.Id);
if (player == nullptr)
{
// Add new player.
player = AddPlayer("", "");
if (player)
{
*player = pendingPlayer;
if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER)
{
_serverConnection->Player = player;
}
newPlayers.push_back(player->Id);
}
}
....
}áááááąá¸ááťááş N7
[CWE-570] 'name == nullptr' áááŻáááˇáş á ááŹá¸áááşáááş áĄááźá˛áááşá¸ áá˝á˛áážáŹá¸ááąááŤáááşá libopenrct2 ServerList.cpp ááá
std::optional<ServerListEntry> ServerListEntry::FromJson(...)
{
auto name = json_object_get(server, "name");
.....
if (name == nullptr || version == nullptr)
{
....
}
else
{
....
entry.name = (name == nullptr ? "" : json_string_value(name));
....
}
....
}áá áşáážáááşáááŻá¸ áááşááááşááąáŹ ááŻááşáááŻááşá¸áá áşááŻááᯠáááşáážáŹá¸áááŻááşááźáŽá¸ á á áşááąá¸ááźááşá¸ááźááˇáş ááźáżááŹááᯠááźáąáážááşá¸áááŻááşáááş á nullptr. áĄáąáŹááşááŤáĄáááŻááşá¸ ááŻááşááźáąáŹááşá¸áááş áĄááźáśááźáŻááŤáááşá
std::optional<ServerListEntry> ServerListEntry::FromJson(...)
{
auto name = json_object_get(server, "name");
.....
if (name == nullptr || version == nullptr)
{
name = ""
....
}
else
{
....
entry.name = json_string_value(name);
....
}
....
}áááááąá¸ááťááş N8
[CWE-1164] 'ColumnHeaderPressedCurrentState' variable áááş áá°ááŽááąáŹáááşáááŻá¸ááᯠáááşáážááşááąá¸áá˛áˇáááşá libopenrct2ui CustomListView.cpp 510
void CustomListView::MouseUp(....)
{
....
if (!ColumnHeaderPressedCurrentState)
{
ColumnHeaderPressed = std::nullopt;
ColumnHeaderPressedCurrentState = false;
Invalidate();
}
}ááŻááşá ááąáŹáşááąáŹáşáá°á¸áááşá¸ááŻáśááááşá áĄááźáąáĄááąáá˝ááşááźá áşá áą áááŻáˇáááŻááş variable ááᯠááźááşáááşáááşáážááşááąá¸áááˇáşáĄááŤáá˝ááş typo áá áşááŻáážáááąáááşáᯠáá°ááááŤáááşá ColumnHeaderPressedCurrentState áĄááááşááŤááť ááážááşááąáŹ.
ááąáŹááşááťááş
ááťá˝ááşáŻááşáááŻáˇáá˝áąáˇááźááşááááˇáşáĄáááŻááşá¸ PVS-Studio static analyzer ááᯠáááşá TeamCity áááąáŹááťááşáá˝ááş ááąáŤááşá¸á ááşá¸ááźááşá¸áááş áĄáá˝ááşáááŻá¸áážááşá¸ááŤáááşá ááŽáááŻááŻááşáááŻáˇá ááąá¸áááşáá˛áˇ configuration file áá áşááŻáá˛ááąá¸áááŻáˇááŻáśááąáŹááşááŤáááşá ááŻááşáááŻá á áşááąá¸ááźááşá¸áááş áááşáááşááźáŽá¸ááąáŹááş ááźáżááŹááťáŹá¸ááᯠááťááşááťááşá¸ááąáŹáşááŻááşáááŻááşáááşááźá áşááźáŽá¸á áážáŻááşáá˝áąá¸áážáŻáážááˇáş áĄááźáąáŹááşá¸áĄáá˛ááťáŹá¸á ááŻááşááťá ááááşáááşá¸ááŤá¸ááąááąá¸ááťáááşáá˝ááş áááşá¸áááŻáˇááᯠáááşáážáŹá¸áážááşá¸áááşá¸áááŻááşáááşááźá áşáááşá
á¤ááąáŹááşá¸ááŤá¸ááᯠáĄááşášáááááşá
ááŹá¸ááźáąáŹ ááááááşáážááˇáş ááťážááąáááŻááŤáá ááŹááŹááźááşáááˇáşááş- Vladislav Stolyarov ááᯠáĄááŻáśá¸ááźáŻááŤá .
source: www.habr.com
