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. แƒ•แƒœแƒแƒฎแƒแƒ—, แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก.

แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

PVS- แƒกแƒขแƒฃแƒ“แƒ˜แƒ โ€” C, C++, C# แƒ“แƒ Java แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒกแƒแƒฎแƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒก แƒ’แƒแƒกแƒแƒแƒ“แƒ•แƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ“. แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ Windows-แƒ–แƒ”, Linux-แƒกแƒ แƒ“แƒ macOS-แƒ–แƒ”. แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ—แƒแƒ•แƒแƒ“ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒก, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒ›แƒ˜แƒก แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ  แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก.

CLMonitor โ€” แƒแƒ แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘แƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒ”แƒœแƒ”แƒšแƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒแƒก. แƒ˜แƒก แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒก แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒแƒ›แƒ“แƒ”. แƒกแƒœแƒแƒแƒžแƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜, แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒฌแƒงแƒ•แƒ”แƒขแƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒšแƒ˜ แƒจแƒ”แƒ›แƒ“แƒ’แƒ”แƒœแƒ”แƒšแƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒแƒก. แƒแƒฆแƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜แƒ, แƒ แƒแƒ› แƒแƒ› แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ C/C++ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒšแƒแƒ“.

PlogConverter โ€“ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒกแƒแƒงแƒ•แƒแƒœแƒแƒ“.

แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒ›แƒแƒ“แƒ˜แƒ— แƒ•แƒชแƒแƒ“แƒแƒ— แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ–แƒ” - แƒ’แƒแƒ•แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒ— OpenRCT2 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜.

OpenRCT2 - แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก RollerCoaster Tycoon 2 (RCT2) แƒฆแƒ˜แƒ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ, แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ แƒแƒฎแƒแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ. แƒ—แƒแƒ›แƒแƒจแƒ˜ แƒขแƒ แƒ˜แƒแƒšแƒ”แƒ‘แƒก แƒ’แƒแƒกแƒแƒ แƒ—แƒแƒ‘แƒ˜ แƒžแƒแƒ แƒ™แƒ˜แƒก แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒกแƒ แƒ“แƒ แƒจแƒ”แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒแƒขแƒ แƒแƒฅแƒชแƒ˜แƒแƒœแƒ”แƒ‘แƒก, แƒ›แƒแƒฆแƒแƒ–แƒ˜แƒ”แƒ‘แƒก แƒ“แƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒก. แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ” แƒฃแƒœแƒ“แƒ แƒ”แƒชแƒแƒ“แƒแƒก แƒ›แƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒแƒก แƒ“แƒ แƒžแƒแƒ แƒ™แƒ˜แƒก แƒ™แƒแƒ แƒ’แƒ˜ แƒ แƒ”แƒžแƒฃแƒขแƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒแƒก แƒกแƒขแƒฃแƒ›แƒ แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก. OpenRCT2 แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ˜แƒ—แƒแƒ›แƒแƒจแƒแƒ— แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒชแƒ”แƒœแƒแƒ แƒจแƒ˜, แƒแƒกแƒ”แƒ•แƒ” แƒกแƒแƒ•แƒแƒ แƒฏแƒ˜แƒจแƒแƒจแƒ˜. แƒกแƒชแƒ”แƒœแƒแƒ แƒ˜ แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก, แƒ แƒแƒ› แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ”แƒ› แƒ“แƒแƒแƒกแƒ แƒฃแƒšแƒแƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒš แƒ“แƒ แƒแƒจแƒ˜, แƒฎแƒแƒšแƒ Sandbox แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ”แƒก แƒแƒแƒจแƒ”แƒœแƒแƒก แƒฃแƒคแƒ แƒ แƒ›แƒแƒฅแƒœแƒ˜แƒšแƒ˜ แƒžแƒแƒ แƒ™แƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ’แƒ•แƒแƒ แƒ˜ แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒคแƒ˜แƒœแƒแƒœแƒกแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒ แƒ”แƒ’แƒฃแƒšแƒ˜แƒ แƒ”แƒ‘แƒ

แƒ“แƒ แƒแƒ˜แƒก แƒ“แƒแƒ–แƒแƒ’แƒ•แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ—, แƒ›แƒ” แƒแƒšแƒ‘แƒแƒ— แƒ’แƒแƒ›แƒแƒ•แƒขแƒแƒ•แƒ”แƒ‘ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒ“แƒ แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ”แƒ‘ แƒ˜แƒ› แƒ›แƒแƒ›แƒ”แƒœแƒขแƒ˜แƒ“แƒแƒœ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฉแƒ”แƒ›แƒก แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ–แƒ” แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก TeamCity แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜. แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ•แƒ˜แƒ“แƒ”แƒ—: localhost:{แƒžแƒแƒ แƒขแƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜} (แƒฉแƒ”แƒ›แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ localhost:9090) แƒ“แƒ แƒจแƒ”แƒ•แƒ˜แƒขแƒแƒœแƒแƒ— แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜. แƒจแƒ”แƒกแƒ•แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒแƒ’แƒ•แƒฎแƒ•แƒ“แƒ”แƒ‘แƒ˜แƒแƒœ:

PVS-Studio แƒ“แƒ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ: TeamCity. Open RollerCoaster Tycoon 2 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜
แƒ“แƒแƒแƒญแƒ˜แƒ แƒ”แƒ— แƒฆแƒ˜แƒšแƒแƒ™แƒก แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— แƒฎแƒ”แƒšแƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒแƒ•แƒกแƒ”แƒ— แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜.

PVS-Studio แƒ“แƒ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ: TeamCity. Open RollerCoaster Tycoon 2 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜
แƒฆแƒ˜แƒšแƒแƒ™แƒ–แƒ” แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒฅแƒ›แƒœแƒ, แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ”แƒกแƒแƒšแƒ›แƒ”แƒ‘แƒ แƒคแƒแƒœแƒฏแƒแƒ แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒ—.

PVS-Studio แƒ“แƒ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ: TeamCity. Open RollerCoaster Tycoon 2 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜
แƒ›แƒแƒ“แƒ˜แƒ— แƒ“แƒแƒ•แƒแƒญแƒ˜แƒ แƒแƒ— แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— build แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ.

PVS-Studio แƒ“แƒ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ: TeamCity. Open RollerCoaster Tycoon 2 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜
แƒจแƒ”แƒแƒ•แƒกแƒ”แƒ— แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ“แƒแƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ— แƒจแƒ”แƒฅแƒ›แƒœแƒ. แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒคแƒแƒœแƒฏแƒแƒ แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒ—แƒฎแƒแƒ•แƒ— แƒแƒ˜แƒ แƒฉแƒ˜แƒแƒ— แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ. แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ˜ แƒฃแƒ™แƒ•แƒ” แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“, แƒ“แƒแƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ— แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜.

PVS-Studio แƒ“แƒ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ: TeamCity. Open RollerCoaster Tycoon 2 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜
แƒ‘แƒแƒšแƒแƒก แƒ’แƒแƒ“แƒแƒ•แƒ“แƒ˜แƒ•แƒแƒ แƒ— แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ–แƒ”.

PVS-Studio แƒ“แƒ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ: TeamCity. Open RollerCoaster Tycoon 2 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜
แƒ›แƒแƒ“แƒ˜แƒ— แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ˜แƒก แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜, แƒแƒ›แƒ˜แƒก แƒ’แƒแƒกแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒšแƒแƒ“ แƒ“แƒแƒแƒญแƒ˜แƒ แƒ”แƒ—: Build แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜ -> Build Step-แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ.

PVS-Studio แƒ“แƒ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ: TeamCity. Open RollerCoaster Tycoon 2 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜
แƒแƒฅ แƒ•แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—:

  • Runner แƒขแƒ˜แƒžแƒ˜ -> Command Line
  • แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ -> แƒ›แƒแƒ แƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜

แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒœแƒ•แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ— แƒแƒœแƒแƒšแƒ˜แƒ–แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒ“แƒ แƒแƒก, แƒแƒฌแƒงแƒแƒ‘แƒ แƒ“แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ”แƒ แƒ—แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒจแƒ”แƒแƒ•แƒกแƒ”แƒ— แƒ•แƒ”แƒšแƒ˜ แƒกแƒแƒ‘แƒแƒŸแƒ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜:

PVS-Studio แƒ“แƒ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ: TeamCity. Open RollerCoaster Tycoon 2 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜
แƒชแƒแƒšแƒ™แƒ”แƒฃแƒš แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒก แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ—. แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ, แƒ แƒแƒ› แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒแƒก, แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒฌแƒงแƒแƒ‘แƒแƒก, แƒ›แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒก, แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒ’แƒแƒ›แƒแƒขแƒแƒœแƒแƒก แƒ“แƒ แƒ›แƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ—แƒ”แƒ แƒ—แƒ›แƒ”แƒขแƒ˜ แƒฎแƒแƒ–แƒ˜ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ.

แƒ‘แƒแƒšแƒ, แƒ แƒแƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒแƒ—, แƒแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒช แƒ›แƒ” แƒ’แƒแƒ›แƒแƒ•แƒ—แƒฅแƒ•แƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ’แƒ–แƒ แƒ›แƒแƒ—แƒ˜ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ’แƒแƒกแƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒšแƒแƒ“. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ—: แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ -> แƒแƒฎแƒแƒšแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ“แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒกแƒแƒ›แƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ˜:

PVS-Studio แƒ“แƒ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ: TeamCity. Open RollerCoaster Tycoon 2 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜
แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒ“แƒแƒแƒญแƒ˜แƒ แƒแƒ— แƒฆแƒ˜แƒšแƒแƒ™แƒก แƒ’แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒแƒ“ แƒ–แƒ”แƒ“แƒ แƒ›แƒแƒ แƒฏแƒ•แƒ”แƒœแƒ แƒ™แƒฃแƒ—แƒฎแƒ”แƒจแƒ˜. แƒกแƒแƒœแƒแƒ› แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒฌแƒงแƒแƒ‘แƒ แƒ“แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”แƒแƒ‘แƒก, แƒกแƒชแƒ”แƒœแƒแƒ แƒ–แƒ” แƒ›แƒแƒ’แƒ˜แƒงแƒ•แƒ”แƒ‘แƒ˜แƒ—.

แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒกแƒชแƒ”แƒœแƒแƒ แƒ˜

แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒ›แƒแƒ•แƒฌแƒ”แƒ แƒแƒ— แƒฃแƒแƒฎแƒšแƒ”แƒกแƒ˜ PVS-Studio แƒ“แƒ˜แƒกแƒขแƒ แƒ˜แƒ‘แƒฃแƒชแƒ˜แƒ. แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— Chocolatey แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ›แƒ”แƒœแƒ”แƒฏแƒ”แƒ แƒก. แƒ›แƒแƒ—แƒ—แƒ•แƒ˜แƒก, แƒ•แƒ˜แƒกแƒแƒช แƒกแƒฃแƒ แƒก แƒ›แƒ”แƒขแƒ˜ แƒ˜แƒชแƒแƒ“แƒ”แƒก แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก:

choco install pvs-studio -y

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ•แƒฃแƒจแƒ•แƒแƒ— CLMonitor แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒ—แƒ•แƒแƒšแƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ.

%CLmon% monitor โ€“-attach

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒแƒ•แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ— แƒžแƒ แƒแƒ”แƒฅแƒขแƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ— MSB แƒแƒ แƒ˜แƒก แƒ’แƒ–แƒ 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-แƒ˜แƒก แƒกแƒžแƒ”แƒชแƒ˜แƒคแƒ˜แƒ™แƒฃแƒ  แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜. แƒแƒ›แƒ˜แƒก แƒฌแƒงแƒแƒšแƒแƒ‘แƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒซแƒšแƒ”แƒ‘แƒ— แƒ›แƒ˜แƒกแƒ˜ แƒœแƒแƒฎแƒ•แƒ แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  build window-แƒจแƒ˜.

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

แƒ‘แƒแƒšแƒ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ แƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ แƒ›แƒ™แƒแƒชแƒ แƒ˜, แƒกแƒแƒ“แƒแƒช แƒ›แƒแƒก แƒแƒ˜แƒฆแƒ”แƒ‘แƒก 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 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜
แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒแƒฏแƒ’แƒฃแƒคแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒฌแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ›แƒ แƒ”แƒ‘แƒ˜แƒ—. แƒ™แƒแƒ“แƒ˜แƒก แƒœแƒแƒ•แƒ˜แƒ’แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒญแƒ˜แƒ แƒแƒ— แƒฎแƒแƒ–แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒก แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ—. แƒ–แƒ”แƒ“แƒ แƒ›แƒแƒ แƒฏแƒ•แƒ”แƒœแƒ แƒ™แƒฃแƒ—แƒฎแƒ”แƒจแƒ˜ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒœแƒ˜แƒจแƒแƒœแƒ–แƒ” แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒฎแƒกแƒœแƒ˜แƒ— แƒแƒฎแƒแƒš แƒฉแƒแƒœแƒแƒ แƒ—แƒก แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“. แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒ•แƒ˜แƒ’แƒแƒชแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒฎแƒแƒ–แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ–แƒ” แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒœแƒแƒ•แƒ˜แƒ’แƒแƒชแƒ˜แƒ แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ˜แƒ“แƒแƒœ SourceTreeRoot แƒ›แƒแƒ แƒ™แƒ”แƒ แƒ˜. แƒ•แƒ˜แƒกแƒแƒช แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒ”แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜, แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ’แƒแƒ”แƒชแƒœแƒแƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒก แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ.

แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒฎแƒ•แƒ

แƒแƒฎแƒšแƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒกแƒ แƒฃแƒšแƒ”แƒ— แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ แƒ“แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ, แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒœแƒแƒžแƒแƒ•แƒœแƒ˜แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒงแƒฃแƒ แƒ”แƒ‘แƒ—.

แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ N1

V773 [CWE-401] แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜ แƒ“แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ "แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒก" แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ’แƒแƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. libopenrct2 ObjectFactory.cpp 443

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

V501 แƒแƒ แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒฃแƒ แƒ˜ แƒฅแƒ•แƒ”แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ”แƒ‘แƒ˜ '(1ULL << WIDX_MONTH_BOX)' แƒ›แƒแƒ แƒชแƒฎแƒœแƒ˜แƒ• แƒ“แƒ แƒ›แƒแƒ แƒฏแƒ•แƒœแƒ˜แƒ• '|'-แƒ“แƒแƒœ. แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜. libopenrct2ui Cheats.cpp 487

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 38

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

แƒ›แƒแƒ“แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒแƒฎแƒšแƒแƒก แƒ›แƒ˜แƒ•แƒฎแƒ”แƒ“แƒแƒ—. แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒฃแƒšแƒ”แƒ‘แƒ imageDirection/8 แƒงแƒแƒšแƒ‘แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ—แƒฃ imageDirection แƒแƒ แƒ˜แƒก -7-แƒ“แƒแƒœ 7-แƒ›แƒ“แƒ” แƒ“แƒ˜แƒแƒžแƒแƒ–แƒแƒœแƒจแƒ˜. แƒ›แƒ”แƒแƒ แƒ” แƒœแƒแƒฌแƒ˜แƒšแƒ˜: (imageDirection / 8) != 3 แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก imageDirection แƒ“แƒ˜แƒแƒžแƒแƒ–แƒแƒœแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ— แƒงแƒแƒคแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: -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;
      ....
  }
  ....
}

แƒ”แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ แƒ“แƒ˜แƒ“แƒ˜ แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ˜แƒ— แƒ˜แƒฅแƒœแƒ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ”แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒแƒชแƒ˜แƒ˜แƒ—. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ“แƒแƒขแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ—แƒฃ แƒ•แƒ˜แƒ›แƒกแƒฏแƒ”แƒšแƒ”แƒ‘แƒ—, แƒแƒ แƒแƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ™แƒแƒ“แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒแƒ›แƒแƒ˜แƒฆแƒ”แƒก. แƒ—แƒฃแƒ›แƒชแƒ, แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ แƒ“แƒแƒ แƒฉแƒ แƒ™แƒฃแƒ แƒกแƒแƒ แƒ˜แƒก ID, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒกแƒ”แƒ•แƒ” แƒแƒ  แƒแƒฅแƒ•แƒก แƒ“แƒ˜แƒ“แƒ˜ แƒแƒ–แƒ แƒ˜.

แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ 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 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜
แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— แƒ’แƒแƒฃแƒ–แƒ˜แƒแƒ แƒแƒ— แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ แƒ”แƒœแƒแƒ•แƒแƒœ แƒแƒฃแƒ“แƒ˜แƒขแƒแƒ แƒ˜แƒแƒก, แƒ’แƒ—แƒฎแƒแƒ•แƒ—, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜แƒก แƒ‘แƒ›แƒฃแƒšแƒ˜: แƒ•แƒšแƒแƒ“แƒ˜แƒกแƒšแƒแƒ• แƒกแƒขแƒแƒšแƒ˜แƒแƒ แƒแƒ•แƒ˜. PVS-Studio แƒ“แƒ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ: TeamCity. Open RollerCoaster Tycoon 2 แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ