PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αžŸαŸαžŽαžΆαžšαžΈαž™αŸ‰αžΌαž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αžŸαŸαžŽαžΆαžšαžΈαž™αŸ‰αžΌαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ PVS-Studio αž‚αžΊαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αžšαž”αžŸαŸ‹αžœαžΆαž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI αŸ” αž αžΎαž™αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž€αžΆαžšαžœαž·αž—αžΆαž‚αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„ PVS-Studio αž–αžΈαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αŸ…αž‡αžΆαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž˜αž½αž™αž…αŸ†αž“αž½αž“αž€αŸαžŠαŸ„αž™ αž€αŸαž™αžΎαž„αž”αž“αŸ’αžαž’αŸ’αžœαžΎαž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡ PVS-Studio αž˜αžΆαž“αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ†αž”αŸ’αž›αŸ‚αž„αž›αž‘αŸ’αž’αž•αž›αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αž‘αŸ…αž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ TeamCity - TeamCity Inspections TypeαŸ” αžαŸ„αŸ‡αž˜αžΎαž›αžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”

αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαžΎ

αž—αžΈαŸ” αž’αŸαžŸαŸ” αž’αŸαžŸαŸ” αžŸαŸ’αž‘αžΌαžŒαžΈαž™αŸ„ β€” αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΌαžŠ C, C++, C# αž“αž·αž„ Java αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαž½αž›αžŠαž›αŸ‹αž€αž·αž…αŸ’αž…αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€ αž“αž·αž„αž‡αž½αžŸαž‡αž»αž›αž€αŸ†αž αž»αžŸαž”αŸ’αžšαž—αŸαž‘αž•αŸ’αžŸαŸαž„αŸ—αŸ” αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„ Windows, Linux ΠΈ macOSαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž™αŸ‰αžΆαž„αžŸαž€αž˜αŸ’αž˜αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αžαŸ’αž›αž½αž“αž―αž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ‚αž˜αž‘αžΆαŸ†αž„αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αž–αžΈαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αžšαž”αžŸαŸ‹αžœαžΆαž•αž„αžŠαŸ‚αžšαŸ”

CLMonitor β€” αž‚αžΊβ€‹αž‡αžΆβ€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž˜αŸβ€‹αžαŸ’αžšαž½αžβ€‹αž–αž·αž“αž·αžαŸ’αž™β€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαž½αžβ€‹αž–αž·αž“αž·αžαŸ’αž™β€‹αž€αžΆαžšβ€‹αž”αžΎαž€β€‹αžŠαŸ†αžŽαžΎαžšβ€‹αž€αžΆαžšβ€‹αž…αž„αž€αŸ’αžšαž„αŸ” αžœαžΆαžαŸ’αžšαžΌαžœαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž—αŸ’αž›αžΆαž˜αŸ—αž˜αž»αž“αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αž„αŸ’αž€αžΎαžαž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž” snooping, server αž“αžΉαž„αžšαžΆαžšαžΆαŸ†αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒ compilers αžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž‚αž½αžšαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸαŸ‡αž’αžΆαž…αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžœαž·αž—αžΆαž‚αž‚αž˜αŸ’αžšαŸ„αž„ C/C++ αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž˜αŸ’αž›αŸ‚αž„ Plog - αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ†αž”αŸ’αž›αŸ‚αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αž‘αŸ…αž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αž•αŸ’αžŸαŸαž„αŸ—αŸ”

αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŸαž·αž€αŸ’αžŸαžΆ

αžαŸ„αŸ‡αžŸαžΆαž€αž›αŸ’αž”αž„αž˜αž»αžαž„αžΆαžšαž“αŸαŸ‡αž“αŸ…αž›αžΎαž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ - αžαŸ„αŸ‡αžœαž·αž—αžΆαž‚αž‚αž˜αŸ’αžšαŸ„αž„ OpenRCT2 αŸ”

OpenRCT2 - αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž”αžΎαž€αž…αŸ†αž αž“αŸƒαž αŸ’αž‚αŸαž˜ RollerCoaster Tycoon 2 (RCT2) αžŠαŸ„αž™αž–αž„αŸ’αžšαžΈαž€αžœαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈ αž“αž·αž„αž‡αž½αžŸαž‡αž»αž›αž€αŸ†αž αž»αžŸαŸ” αž€αžΆαžšαž›αŸαž„αž αŸ’αž‚αŸαž˜αžœαž·αž›αž‡αž»αŸ†αžœαž·αž‰αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹ αž“αž·αž„αž€αžΆαžšαžαŸ‚αžšαž€αŸ’αžŸαžΆαžŸαž½αž“αž€αž˜αŸ’αžŸαžΆαž“αŸ’αžαžŠαŸ‚αž›αž˜αžΆαž“αž€αž“αŸ’αž›αŸ‚αž„αž‡αž·αŸ‡ αž αžΆαž„ αž“αž·αž„αžŸαž˜αŸ’αž—αžΆαžšαŸˆαž”αžšαž·αž€αŸ’αžαžΆαžšαž•αŸ’αžŸαŸαž„αŸ—αŸ” αž’αŸ’αž“αž€αž›αŸαž„αžαŸ’αžšαžΌαžœαžαŸ‚αž–αŸ’αž™αžΆαž™αžΆαž˜αžšαž€αž”αŸ’αžšαžΆαž€αŸ‹αž…αŸ†αžŽαŸαž‰ αž“αž·αž„αžšαž€αŸ’αžŸαžΆαž€αŸαžšαŸ’αžαž·αŸαžˆαŸ’αž˜αŸ„αŸ‡αž›αŸ’αž’αžšαž”αžŸαŸ‹αž§αž‘αŸ’αž™αžΆαž“ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž±αŸ’αž™αž—αŸ’αž‰αŸ€αžœαžŸαž”αŸ’αž”αžΆαž™αž…αž·αžαŸ’αžαŸ” OpenRCT2 αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž›αŸαž„αž‘αžΆαŸ†αž„αž€αŸ’αž“αž»αž„αžŸαŸαžŽαžΆαžšαžΈαž™αŸ‰αžΌ αž“αž·αž„αž”αŸ’αžšαž’αž”αŸ‹αžαŸ’αžŸαžΆαž…αŸ‹αŸ” αžŸαŸαžŽαžΆαžšαžΈαž™αŸ‰αžΌαžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž’αŸ’αž“αž€αž›αŸαž„αž”αŸ†αž–αŸαž‰αž€αž·αž…αŸ’αž…αž€αžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αž€αŸ†αžŽαžαŸ‹ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž› Sandbox αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž›αŸαž„αž”αž„αŸ’αž€αžΎαžαžŸαž½αž“αž€αž˜αŸ’αžŸαžΆαž“αŸ’αžαžŠαŸ‚αž›αž’αžΆαž…αž”αžαŸ‹αž”αŸ‚αž“αž”αžΆαž“αžŠαŸ„αž™αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„ αž¬αž αž·αžšαž‰αŸ’αž‰αžœαžαŸ’αžαž»αžŽαžΆαž˜αž½αž™αž‘αžΎαž™αŸ”

αž€αžΆαžšαž›αŸƒαžαž˜αŸ’αžšαžΌαžœ

αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž“αŸ’αžŸαŸ†αž–αŸαž›αžœαŸαž›αžΆ αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαž αŸ‚αž›αž“αžΉαž„αžšαŸ†αž›αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž–αŸαž›αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ TeamCity αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αŸ” αž™αžΎαž„αžαŸ’αžšαžΌαžœαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αŸ– localhost:{port αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„} (αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† localhost:9090) αž αžΎαž™αž”αž‰αŸ’αž…αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž…αžΌαž›αž™αžΎαž„αž“αžΉαž„αžŸαŸ’αžœαžΆαž‚αž˜αž“αŸαžŠαŸ„αž™αŸ–

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αž…αž»αž…αž›αžΎαž”αŸŠαžΌαžαž»αž„αž”αž„αŸ’αž€αžΎαžαž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αžŠαŸƒ αž αžΎαž™αž”αŸ†αž–αŸαž‰αž€αŸ’αž“αž»αž„αžœαžΆαž›αŸ”

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž…αž»αž…αž”αŸŠαžΌαžαž»αž„ αž”αž„αŸ’αž€αžΎαžαž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸ’αžœαžΆαž‚αž˜αž“αŸαžŠαŸ„αž™αž”αž„αŸ’αž’αž½αž…αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αŸ”

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αžαŸ„αŸ‡αž…αž»αž… αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’.

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αž”αŸ†αž–αŸαž‰αžœαžΆαž›αž αžΎαž™αž…αž»αž… αž”αž„αŸ’αž€αžΎαž. αž™αžΎαž„αžƒαžΎαž‰αž”αž„αŸ’αž’αž½αž…αž˜αž½αž™αžŠαŸ‚αž›αžŸαŸ’αž“αžΎαž±αŸ’αž™αž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αŸ†αžŽαŸ‚αŸ” αžŠαŸ„αž™αžŸαžΆαžšαž”αŸ’αžšαž—αž–αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αžšαž½αž…αž αžΎαž™ αžŸαžΌαž˜αž…αž»αž… αžšαŸ†αž›αž„.

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αž‡αžΆαž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž™αžΎαž„αž”αž“αŸ’αžαž‘αŸ…αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αŸ”

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αžαŸ„αŸ‡β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αž‡αŸ†αž αžΆαž“β€‹αžŠαŸ†αž‘αžΎαž„β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž’αŸ’αžœαžΎβ€‹αž€αžΆαžšβ€‹αž…αž»αž…β€‹αž“αŸαŸ‡αŸ– αž‡αŸ†αž αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹ -> αž”αž“αŸ’αžαŸ‚αž˜αž‡αŸ†αž αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹.

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαŸ–

  • αž”αŸ’αžšαž—αŸαž‘αž’αŸ’αž“αž€αžšαžαŸ‹ -> αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ
  • αžšαžαŸ‹ -> αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“

αžŠαŸ„αž™αžŸαžΆαžšαž™αžΎαž„αž“αžΉαž„αž’αŸ’αžœαžΎαž€αžΆαžšαžœαž·αž—αžΆαž‚αž€αŸ†αž‘αž»αž„αž–αŸαž›αž…αž„αž€αŸ’αžšαž„αž‚αž˜αŸ’αžšαŸ„αž„ αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆ αž“αž·αž„αž€αžΆαžšαžœαž·αž—αžΆαž‚αž‚αž½αžšαžαŸ‚αž‡αžΆαž‡αŸ†αž αžΆαž“αž˜αž½αž™ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŸαžΌαž˜αž”αŸ†αž–αŸαž‰αž€αŸ’αž“αž»αž„αžœαžΆαž› αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“:

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž‡αŸ†αž αžΆαž“αž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αŸ” αžœαžΆαž‡αžΆαž€αžΆαžšαžŸαŸ†αžαžΆαž“αŸ‹αžŽαžΆαžŸαŸ‹αžŠαŸ‚αž›αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ αž€αžΆαžšαž•αŸ’αž‚αž»αŸ†αž‚αž˜αŸ’αžšαŸ„αž„ αž€αžΆαžšαžœαž·αž—αžΆαž‚αžœαžΆ αž›αž‘αŸ’αž’αž•αž›αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸ αž“αž·αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™ αžœαžΆαžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž–αŸαž›αžαŸ’αžšαžΉαž˜αžαŸ‚αžŠαž”αŸ‹αž˜αž½αž™αž‡αž½αžšαž“αŸƒαž€αžΌαžŠαŸ”

αžšαžΏαž„αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‚αžΊαž€αŸ†αžŽαžαŸ‹αž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“ αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžšαŸ€αž”αžšαžΆαž”αŸ‹αž’αŸ†αž–αžΈαžœαž·αž’αžΈαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž›αž˜αŸ’αž’αž›αž‘αŸ’αž’αž—αžΆαž–αž’αžΆαž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αžŸαžΌαž˜αž”αž“αŸ’αžαŸ– αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš -> αž”αž“αŸ’αžαŸ‚αž˜αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αž˜αžΈαŸ” αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜αž’αžαŸαžšαž”αžΈαŸ–

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‚αžΊαž…αž»αž…αž”αŸŠαžΌαžαž»αž„ Run αž“αŸ…αž‡αŸ’αžšαž»αž„αžαžΆαž„αžŸαŸ’αžαžΆαŸ†αžαžΆαž„αž›αžΎαŸ” αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž‚αž˜αŸ’αžšαŸ„αž„αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ† αž“αž·αž„αžœαž·αž—αžΆαž‚ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αŸ†αž–αžΈαžŸαŸ’αž‚αŸ’αžšαžΈαž”αŸ”

αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹

αžŠαŸ†αž”αžΌαž„αž™αžΎαž„αžαŸ’αžšαžΌαžœαž‘αžΆαž‰αž™αž€αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™ PVS-Studio αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αž„αŸ’αž’αžŸαŸ‹αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αž™αžΎαž„αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹ Chocolatey αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžŠαŸ‚αž›αž…αž„αŸ‹αžŠαžΉαž„αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžšαžΏαž„αž“αŸαŸ‡αž˜αžΆαž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” αž’αžαŸ’αžαž”αž‘:

choco install pvs-studio -y

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžŸαžΌαž˜αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž§αž”αž€αžšαžŽαŸαžαžΆαž˜αžŠαžΆαž“αž€αžΆαžšαž€αžŸαžΆαž„αž‚αž˜αŸ’αžšαŸ„αž„ CLMonitor αŸ”

%CLmon% monitor –-attach

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž“αžΉαž„αžŸαžΆαž„αžŸαž„αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž‡αžΆαž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“ αž’αŸαžŸαž”αŸŠαžΈαž”αŸŠαžΈ αž‚αžΊαž‡αžΆαž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž€αŸ†αžŽαŸ‚ MSBuild αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαžŸαžΆαž„αžŸαž„αŸ‹

%MSB% %ProjPath% /t:clean
%MSB% %ProjPath% /t:rebuild /p:configuration=release
%MSB% %ProjPath% /t:g2
%MSB% %ProjPath% /t:PublishPortable

αžαŸ„αŸ‡αž”αž‰αŸ’αž…αžΌαž›αž›αŸαžαž€αžΌαžŠαž…αžΌαž› αž“αž·αž„αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ PVS-StudioαŸ–

%PVS-Studio_cmd% credentials --username %PVS_Name% --serialNumber %PVS_Key%

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹ αžŸαžΌαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš CLMonitor αž˜αŸ’αžαž„αž‘αŸ€αžαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž»αž“ αž“αž·αž„αž€αžΆαžšαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αžαŸ–

%CLmon% analyze -l "c:ptest.plog"

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž–αžΈαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” PlogConverter αž”αŸ†αž”αŸ’αž›αŸ‚αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž–αžΈαž‘αž˜αŸ’αžšαž„αŸ‹αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž‘αŸ…αž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžšαž”αžŸαŸ‹ TeamCity αŸ” αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž’αžΆαž…αž˜αžΎαž›αžœαžΆαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž„αŸ’αž’αž½αž…αžŸαžΆαž„αžŸαž„αŸ‹αŸ”

%PlogConverter% "c:ptest.plog" --renderTypes=TeamCity -o "C:temp"

αž‡αŸ†αž αžΆαž“αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž‚αžΊαžαŸ’αžšαžΌαžœαž”αž„αŸ’αž αžΆαž‰αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αž“αŸ…αž€αŸ’αž“αž»αž„ stdoutαžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αž’αŸ’αž“αž€αž‰αŸ‚αž€ TeamCity αŸ”

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"

αž€αŸ’αž“αž»αž„αž–αŸαž›αž“αŸαŸ‡αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž“αž·αž„αž€αžΆαžšαžœαž·αž—αžΆαž‚αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αž™αžΎαž„αž’αžΆαž…αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž•αŸ’αž‘αžΆαŸ†αž„ αž‚αž˜αŸ’αžšαŸ„αž„ αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž€αžŠαžαžΆαžœαžΆαŸ”

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαžΌαž˜αž…αž»αž…αž›αžΎ αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαžšαž»αž”αž‘αŸ…αž˜αžΎαž›αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αŸ–

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž‡αžΆαž€αŸ’αžšαž»αž˜αžŠαŸ„αž™αž›αŸαžαž€αŸ’αž”αž½αž“αžšαŸ„αž‚αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžšαž»αž€αžšαž€αžαžΆαž˜αž›αŸαžαž€αžΌαžŠ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž…αž»αž…αž›αžΎαž›αŸαžαž”αž“αŸ’αž‘αžΆαžαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž‰αŸ’αž‰αžΆαž–αŸ’αžšαž˜αžΆαž“αŸ” αž€αžΆαžšαž…αž»αž…αž›αžΎαžŸαž‰αŸ’αž‰αžΆαžŸαž½αžšαž“αŸ…αž‡αŸ’αžšαž»αž„αžαžΆαž„αžŸαŸ’αžαžΆαŸ†αžαžΆαž„αž›αžΎαž“αžΉαž„αž”αžΎαž€αž•αŸ’αž‘αžΆαŸ†αž„αžαŸ’αž˜αžΈαž˜αž½αž™αž‡αžΆαž˜αž½αž™αž―αž€αžŸαžΆαžšαŸ” αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αžšαž»αž€αžšαž€αžαžΆαž˜αžšαž™αŸˆαž€αžΌαžŠαžŠαŸ„αž™αž…αž»αž…αž›αžΎαž›αŸαžαž”αž“αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αŸ” αž€αžΆαžšαžšαž»αž€αžšαž€αž–αžΈαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž–αžΈαž…αž˜αŸ’αž„αžΆαž™αž‚αžΊαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎ αž”αŸ’αžšαž—αž–TreeRoot αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αŸ” αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎαžšαž”αŸ€αž”αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αž“αŸαŸ‡αž’αžΆαž…αžŸαŸ’αž‚αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž―αž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” αž―αž€αžŸαžΆαžš.

αž€αžΆαžšαž˜αžΎαž›αž›αž‘αŸ’αž’αž•αž›αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαŸ†αžŽαž„αŸ‹αž αžΎαž™ αžŸαžΌαž˜αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αž˜αžΎαž›αŸ”

αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“ N1

V773 [CWE-401] αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž…αŸ„αž›αžŠαŸ„αž™αž˜αž·αž“αž”αž‰αŸ’αž…αŸαž‰αž‘αŸ’αžšαž“αž·αž… 'αž›αž‘αŸ’αž’αž•αž›' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‚αžΊαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αŸ” 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;
}

αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžƒαžΎαž‰αž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αŸ‚αž„αž…αŸ‚αž€αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ„αž™αžαžΆαž˜αžœαž“αŸ’αž αž”αž„αŸ’αž€αžΎαžαžœαžαŸ’αžαž»αž“αŸ…αž–αŸαž›αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αž€αžΎαžαž‘αžΎαž„ αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αž’αžΆαžαž‘αŸ αž αžΎαž™αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž€αžΎαžαž‘αžΎαž„αŸ”

αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“ N2

V501 αž˜αžΆαž“αž€αž“αŸ’αžŸαŸ„αž˜αžšαž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸαŸ‡αž”αž·αž‘ '(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),
  ....
};

αž˜αžΆαž“αž˜αž“αž»αžŸαŸ’αžŸαžαž·αž…αžŽαžΆαžŸαŸ‹αžŠαŸ‚αž›αž€αŸ’αžšαŸ…αž–αžΈαž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αžαž’αžΆαž…αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αž€αžΆαžšαž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž“αŸαŸ‡αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž”αž·αž‘αž—αŸ’αž‡αžΆαž”αŸ‹αž“αŸαŸ‡αž‚αžΊαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αž“αŸαŸ‡αž™αŸ‰αžΆαž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αŸ”

αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“ N3

V703 αžœαžΆαž‡αžΆαžšαžΏαž„αž…αž˜αŸ’αž›αŸ‚αž€αžŠαŸ‚αž›αžœαžΆαž› 'αž‘αž„αŸ‹' αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž˜αž€αž–αžΈ 'RCT12BannerElement' αžŸαžšαžŸαŸαžšαž‡αžΆαž“αŸ‹αž›αžΎαžœαžΆαž›αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαž€αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ 'RCT12TileElementBase' αŸ” αž–αž·αž“αž·αžαŸ’αž™αž”αž“αŸ’αž‘αžΆαžαŸ‹αŸ– RCT12.h:570, RCT12.h:259αŸ” libopenrct2 RCT12.h 570

struct RCT12SpriteBase
{
  ....
  uint8_t flags;
  ....
};
struct rct1_peep : RCT12SpriteBase
{
  ....
  uint8_t flags;
  ....
};

αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž–αž·αžβ€‹αžŽαžΆαžŸαŸ‹ αž€αžΆαžšβ€‹αž”αŸ’αžšαžΎβ€‹αž’αžαŸαžšβ€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αžŠαžΌαž…β€‹αž‚αŸ’αž“αžΆβ€‹αž“αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αžαŸ’αž“αžΆαž€αŸ‹β€‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž“αž·αž„β€‹αž€αŸ’αž“αž»αž„β€‹αž›αŸ†αžŠαžΆαž”αŸ‹β€‹αž”αž“αŸ’αžβ€‹αž˜αž·αž“β€‹αž˜αŸ‚αž“β€‹αžαŸ‚αž„αžαŸ‚β€‹αž˜αžΆαž“β€‹αž€αŸ†αž αž»αžŸβ€‹αž“αŸ„αŸ‡β€‹αž‘αŸαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž”αž…αŸ’αž…αŸαž€αžœαž·αž‘αŸ’αž™αžΆαž˜αžšαžαž€αžŠαŸ„αž™αžαŸ’αž›αž½αž“αžœαžΆαžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž‚αŸ’αžšαž”αŸ‹αžœαž·αžŸαŸαž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹αž˜αŸαž‚αžΊαž˜αžΆαž“αžœαžαŸ’αžαž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαž€αŸ‹αž€αžΌαž“αŸ” αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαžœαžΆαž›αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž’αŸ’αž“αž€αž‘αž‘αž½αž›αž˜αžšαžαž€ αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž—αŸαž“αŸ’αžαž…αŸ’αžšαž‘αŸ†αŸ”

αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“ N4

V793 αžœαžΆαž‡αžΆαžšαžΏαž„αž…αž˜αŸ’αž›αŸ‚αž€αžŠαŸ‚αž›αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸ 'imageDirection / 8' αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž›αž€αŸ’αžαžαžŽαŸ’αžŒαŸ” αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‡αžΆαž˜αž½αž™αž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” libopenrct2 ObservationTower.cpp ៣៨

void vehicle_visual_observation_tower(...., int32_t imageDirection, ....)
{
  if ((imageDirection / 8) && (imageDirection / 8) != 3)
  {
    ....
  }
  ....
}

αž…αžΌαžšαž™αžΎαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž±αŸ’αž™αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αž”αžΆαžŸαŸ‹αŸ” αž€αž“αŸ’αžŸαŸ„αž˜ αžšαžΌαž”αž—αžΆαž–αž‘αž·αžŸαžŠαŸ… / ៨ αž“αžΉαž„αž˜αž·αž“αž–αž·αžαž”αŸ’αžšαžŸαž·αž“αž”αžΎ αž‘αž·αžŸαžŠαŸ…αžšαžΌαž”αž—αžΆαž– αžŸαŸ’αžαž·αžαž“αŸ…αž…αž“αŸ’αž›αŸ„αŸ‡αž–αžΈ -7 αžŠαž›αŸ‹ 7 αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈαž–αžΈαžšαŸ– (αžšαžΌαž”αž—αžΆαž–αž‘αž·αžŸαžŠαŸ… / ៨) != ៣ αž–αž·αž“αž·αžαŸ’αž™ αž‘αž·αžŸαžŠαŸ…αžšαžΌαž”αž—αžΆαž– αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αŸ…αžαžΆαž„αž€αŸ’αžšαŸ…αž‡αž½αžš: αž–αžΈ -31 αž‘αŸ… -24 αž“αž·αž„αž–αžΈ 24 αž‘αŸ… 31 αžšαŸ€αž„αž‚αŸ’αž“αžΆαŸ” αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž…αž˜αŸ’αž›αŸ‚αž€αžŽαžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž›αŸαžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž€αŸ’αž“αž»αž„αž‡αž½αžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αžœαž·αž’αžΈαž“αŸαŸ‡ αž αžΎαž™αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αž·αž“αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸƒαž€αžΌαžŠαž“αŸαŸ‡αž€αŸαžŠαŸ„αž™ αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αžŸαžšαžŸαŸαžšαž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‘αžΎαž„αžœαž·αž‰αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αŸ” αž“αŸαŸ‡αž“αžΉαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž‡αžΈαžœαž·αžαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžŠαŸ‚αž›αž“αžΉαž„αž’αžΆαž“ αž“αž·αž„αžšαž€αŸ’αžŸαžΆαž€αžΌαžŠαž“αŸαŸ‡αŸ”

αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“ N5

V587 αž›αŸ†αžŠαžΆαž”αŸ‹αžŸαŸαžŸαž“αŸƒαž€αž·αž…αŸ’αž…αž€αžΆαžšαž”αŸ’αžšαž—αŸαž‘αž“αŸαŸ‡αŸ– 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;
      ....
  }
  ....
}

αž”αŸ†αžŽαŸ‚αž€αž€αžΌαžŠαž“αŸαŸ‡αž‘αŸ†αž“αž„αž‡αžΆαž‘αž‘αž½αž›αž”αžΆαž“αžŠαŸ„αž™αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžŠαŸ„αž™αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžŠαŸ„αž™αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹ αž•αŸ’αž“αŸ‚αž€αž“αŸƒαž€αžΌαžŠαž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž“αŸ…αžαŸ‚αž˜αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž–αžΈαžšαž”αžΈαžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹ αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž‘αžŸαŸ’αžŸαž“αŸαž‘αŸ’αžšαž“αž·αž…αžŠαŸ‚αž›β€‹αž€αŸβ€‹αž˜αž·αž“β€‹αž˜αžΆαž“β€‹αž“αŸαž™β€‹αž…αŸ’αžšαžΎαž“β€‹αžŠαŸ‚αžšαŸ”

αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“ N6

V1004 [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);                    // <=
  }
  ....
}

αž›αŸαžαž€αžΌαžŠαž“αŸαŸ‡αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ‚ αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž–αž·αž“αž·αžαŸ’αž™αžœαžΆαž‡αžΆαž›αžΎαž€αž‘αžΈαž”αžΈ αž€αžΈαž‘αžΆαž€αžš αž‘αŸ…β€‹αž‘αŸ’αžšαž“αž·αž…β€‹αž‘αž‘αŸ αž¬β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αžœαžΆβ€‹αž‘αŸ…β€‹αžαž½β€‹αž“αŸƒβ€‹αžŸαŸαž…αž€αŸ’αžαžΈβ€‹αžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸβ€‹αžαžΆαž˜β€‹αž›αž€αŸ’αžαžαžŽαŸ’αžŒαŸ” αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ†αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈαž–αžΈαžšαŸ–

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

V547 [CWE-570] αž€αž“αŸ’αžŸαŸ„αž˜ 'name == nullptr' αžαŸ‚αž„αžαŸ‚αž˜αž·αž“αž–αž·αžαŸ” libopenrct2 ServerList.cpp 102

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

V1048 [CWE-1164] ធថេរ 'ColumnHeaderPressedCurrentState' αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αžαž˜αŸ’αž›αŸƒαžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” libopenrct2ui CustomListView.cpp 510

void CustomListView::MouseUp(....)
{
  ....
  if (!ColumnHeaderPressedCurrentState)
  {
    ColumnHeaderPressed = std::nullopt;
    ColumnHeaderPressedCurrentState = false;
    Invalidate();
  }
}

αž€αžΌαžŠαž˜αžΎαž›αž‘αŸ…αž…αž˜αŸ’αž›αŸ‚αž€αžŽαžΆαžŸαŸ‹αŸ” αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαŸ’αž‰αž»αŸ†αžαžΆαž˜αžΆαž“αž€αžΆαžšαžœαžΆαž™αžαž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒ αž¬αž“αŸ…αž–αŸαž›αž€αŸ†αžŽαžαŸ‹αž’αžαŸαžšαž‘αžΎαž„αžœαž·αž‰ ColumnHeaderPressedCurrentState αžαž˜αŸ’αž›αŸƒ αž˜αž·αž“αž–αž·αž.

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰ αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αž PVS-Studio αž‘αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„ TeamCity αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αžŽαžΆαžŸαŸ‹αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž αžΎαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαžΌαž…αž˜αž½αž™αŸ” αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž›αŸαžαž€αžΌαžŠαž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αž”αž‰αŸ’αž αžΆαž—αŸ’αž›αžΆαž˜αŸ—αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž“αžΉαž„αž‡αž½αž™αž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αžœαžΆαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž“αž·αž„αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αžαŸ‚αž˜αžΆαž“αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αŸ”

PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2
αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αž‘αžŸαŸ’αžŸαž“αž·αž€αž‡αž“αžŠαŸ‚αž›αž“αž·αž™αžΆαž™αž—αžΆαžŸαžΆαž’αž„αŸ‹αž‚αŸ’αž›αŸαžŸ αžŸαžΌαž˜αž”αŸ’αžšαžΎαžαŸ†αžŽαž”αž€αž”αŸ’αžšαŸ‚αŸ– Vladislav Stolyarov αŸ” PVS-Studio αž“αž·αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– TeamCity αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ Open RollerCoaster Tycoon 2.

αž”αŸ’αžšαž—αž–: www.habr.com

αž‘αž·αž‰αž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž€αžΆαžšαž–αžΆαžš DDoS, αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS VDS πŸ”₯ αž‘αž·αž‰αžŸαŸαžœαžΆαž”αž„αŸ’αž αŸ„αŸ‡αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αžΆαžšαž–αžΆαžš DDoS αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS VDS | ProHoster