PVS-Studio နဟင့် စဉ်ဆက်မပဌတ်ပေါင်သစပ်မဟု- TeamCity။ Open RollerCoaster Tycoon 2 ပရောဂျက်ကို လေ့လာခဌင်သ။

PVS-Studio နဟင့် စဉ်ဆက်မပဌတ်ပေါင်သစပ်မဟု- TeamCity။ Open RollerCoaster Tycoon 2 ပရောဂျက်ကို လေ့လာခဌင်သ။
PVS-Studio ခလဲခဌမ်သစိတ်ဖဌာမဟုကို အသုံသပဌုခဌင်သအတလက် လက်ရဟိအခဌေအနေမျာသထဲမဟတစ်ခုမဟာ CI စနစ်မျာသနဟင့် ပေါင်သစည်သခဌင်သဖဌစ်ပါသည်။ PVS-Studio ပရောဂျက်တစ်ခုအာသ စဉ်ဆက်မပဌတ်ပေါင်သစည်သမဟုစနစ်နီသပါသမဟ ခလဲခဌမ်သစိတ်ဖဌာမဟုအချို့ကို အမိန့်ပေသရုံအနည်သငယ်ဖဌင့် တည်ဆောက်နိုင်သော်လည်သ ကလုပ်ငန်သစဉ်ကို ပိုမိုအဆင်ပဌေစေရန် ကျလန်ုပ်တို့ ဆက်လက်လုပ်ဆောင်ပါသည်။ PVS-Studio သည် ယခုအခါ ခလဲခဌမ်သစိတ်ဖဌာမဟုအထလက်အာသ TeamCity - TeamCity စစ်ဆေသရေသအမျိုသအစာသအတလက် ဖော်မက်အဖဌစ်သို့ ပဌောင်သလဲရန်အတလက် ပံ့ပိုသမဟုရဟိပါသည်။ ဘယ်လိုအလုပ်လုပ်လဲ ကဌည့်ရအောင်။

အသုံသပဌုတဲ့ဆော့ဖ်ဝဲနဲ့ပတ်သက်တဲ့အချက်အလက်

PVS-Studio မဟ — အမျိုသမျိုသသောအမဟာသမျာသကိုရဟာဖလေခဌင်သနဟင့်ပဌုပဌင်ခဌင်သလုပ်ငန်သတာဝန်ကိုလလယ်ကူချောမလေ့စေရန်ဒီဇိုင်သပဌုလုပ်ထာသသော C, C++, C# နဟင့် Java ကုဒ်မျာသ၏တည်ငဌိမ်သောခလဲခဌမ်သစိတ်ဖဌာသူ။ ခလဲခဌမ်သစိတ်ဖဌာသူအာသ Windows၊ Linux နဟင့် macOS တို့တလင် အသုံသပဌုနိုင်သည်။ ကဆောင်သပါသတလင် ကျလန်ုပ်တို့သည် ခလဲခဌမ်သစိတ်ဖဌာသူကိုယ်တိုင်သာမက ၎င်သ၏ဖဌန့်ဖဌူသမဟုမဟ အသုံသဝင်မဟုအချို့ကိုလည်သ တက်ကဌလစလာအသုံသပဌုပါမည်။

CLMonitor — compiler လလဟင့်တင်မဟုကို စောင့်ကဌည့်စစ်ဆေသသည့် စောင့်ကဌည့်ဆာဗာတစ်ခုဖဌစ်သည်။ သင့်ပရောဂျက်ကို မတည်ဆောက်မီ ၎င်သကို ချက်ချင်သလုပ်ဆောင်ရပါမည်။ snooping မုဒ်တလင်၊ ဆာဗာသည် ပံ့ပိုသပေသထာသသော compiler မျာသအာသလုံသ၏ လုပ်ဆောင်ချက်မျာသကို ကဌာသဖဌတ်မည်ဖဌစ်သည်။ က utility ကို C/C++ ပရောဂျက်မျာသကိုခလဲခဌမ်သစိတ်ဖဌာရန်သာအသုံသပဌုနိုင်သည်မဟာမဟတ်သာသထိုက်သည်။

PlogConverter - ခလဲခဌမ်သစိတ်ဖဌာမဟုအစီရင်ခံစာမျာသကို မတူညီသောဖော်မတ်မျာသအဖဌစ်သို့ ပဌောင်သလဲခဌင်သအတလက် အသုံသဝင်မဟုတစ်ခု။

ပရောဂျက်နဟင့်ပတ်သက်သော အချက်အလက်မျာသကို လေ့လာနိုင်ပါသည်။

လက်တလေ့နမူနာတစ်ခုတလင် ကလုပ်ဆောင်ချက်ကို စမ်သကဌည့်ကဌပါစို့ - OpenRCT2 ပရောဂျက်ကို ခလဲခဌမ်သစိတ်ဖဌာကဌည့်ကဌပါစို့။

OpenRCT2 - RollerCoaster Tycoon 2 (RCT2) ဂိမ်သကို လုပ်ဆောင်ချက်အသစ်မျာသဖဌင့် ချဲ့ထလင်ကာ ချို့ယလင်သချက်မျာသကို ပဌုပဌင်ပေသသည့် ဂိမ်သကို ပလင့်လင်သစလာ အကောင်အထည်ဖော်ခဌင်သ။ ဂိမ်သကစာသခဌင်သသည် စီသနင်သမဟုမျာသ၊ ဈေသဆိုင်မျာသနဟင့် အဆောက်အညမျာသပါရဟိသော အပန်သဖဌေဥယျာဉ်ကို တည်ဆောက်ခဌင်သနဟင့် ထိန်သသိမ်သခဌင်သတို့ကို လဟည့်ပတ်သည်။ ကစာသသမာသသည် ဧည့်သည်မျာသကို ပျော်ရလဟင်စေရန်နဟင့် ပန်သခဌံ၏ နာမည်ကောင်သကို ထိန်သသိမ်သကာ အမဌတ်အစလန်သရအောင် ကဌိုသစာသရမည်ဖဌစ်သည်။ OpenRCT2 သည် သင့်အာသ ဇာတ်လမ်သမျာသနဟင့် sandbox နဟစ်ခုလုံသတလင် ကစာသရန် ခလင့်ပဌုသည်။ ဇာတ်လမ်သမျာသသည် ကစာသသမာသအာသ သတ်မဟတ်အချိန်အတလင်သ တိကျသောလုပ်ငန်သတာဝန်တစ်ခုပဌီသမဌောက်ရန် လိုအပ်သော်လည်သ Sandbox သည် ကစာသသမာသအာသ ကန့်သတ်ချက်မျာသ သို့မဟုတ် ငလေကဌေသတစ်စုံတစ်ရာမရဟိဘဲ ပိုမိုပဌောင်သလလယ်ပဌင်လလယ်ရဟိသောပန်သခဌံကို တည်ဆောက်နိုင်စေပါသည်။

သင့်အောင်လုပ်ခဌင်သ

အချိန်ကုန်သက်သာရန်အတလက်၊ ကျလန်ုပ်သည် ကျလန်ုပ်၏ကလန်ပဌူတာတလင် TeamCity ဆာဗာကို လုပ်ဆောင်နေသည့်အချိန်မဟ စတင်၍ တပ်ဆင်ခဌင်သလုပ်ငန်သစဉ်ကို ကျော်သလာသပေမည်။ ကျလန်ုပ်တို့သည် - localhost:{တပ်ဆင်ခဌင်သလုပ်ငန်သစဉ်အတလင်သ သတ်မဟတ်ထာသသော ဆိပ်ကမ်သ} (ကျလန်ုပ်၏ကိစ္စတလင်၊ localhost:9090) သို့သလာသ၍ ခလင့်ပဌုချက်ဒေတာကို ထည့်ပါ။ ဝင်ပဌီသနောက် ကျလန်ုပ်တို့အာသ နဟုတ်ဆက်ပါမည်။

PVS-Studio နဟင့် စဉ်ဆက်မပဌတ်ပေါင်သစပ်မဟု- TeamCity။ Open RollerCoaster Tycoon 2 ပရောဂျက်ကို လေ့လာခဌင်သ။
Create Project ခလုတ်ကို နဟိပ်ပါ။ ထို့နောက် Manually ကိုရလေသချယ်ပဌီသ ကလက်လပ်မျာသကို ဖဌည့်စလက်ပါ။

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 ပရောဂျက်ကို လေ့လာခဌင်သ။
စုစည်သမဟု အဆင့်မျာသကို ပေါင်သထည့်ကဌပါစို့။ Build အဆင့်မျာသ -> တည်ဆောက်မဟုအဆင့်ကို ထည့်ပါ။.

PVS-Studio နဟင့် စဉ်ဆက်မပဌတ်ပေါင်သစပ်မဟု- TeamCity။ Open RollerCoaster Tycoon 2 ပရောဂျက်ကို လေ့လာခဌင်သ။
ကနေရာတလင် ကျလန်ုပ်တို့ ရလေသချယ်သည်-

  • Runner အမျိုသအစာသ -> Command Line
  • Run -> Custom Script ကိုဖလင့်ပါ။

ပရောဂျက်စုစည်သမဟုအတလင်သ ကျလန်ုပ်တို့သည် ခလဲခဌမ်သစိတ်ဖဌာမဟုကို လုပ်ဆောင်မည်ဖဌစ်သောကဌောင့် စုစည်သမဟုနဟင့် ခလဲခဌမ်သစိတ်ဖဌာမဟုသည် အဆင့်တစ်ဆင့်ဖဌစ်သင့်သောကဌောင့် ကလက်လပ်တလင် ဖဌည့်စလက်ပါ။ စိတ်ကဌိုက် Script:

PVS-Studio နဟင့် စဉ်ဆက်မပဌတ်ပေါင်သစပ်မဟု- TeamCity။ Open RollerCoaster Tycoon 2 ပရောဂျက်ကို လေ့လာခဌင်သ။
နောက်ပိုင်သတလင် တစ်ညသချင်သ အဆင့်မျာသကို ကဌည့်ပါမည်။ ခလဲခဌမ်သစိတ်ဖဌာသူအာသ တင်ခဌင်သ၊ ပရောဂျက်ကို စုစည်သခဌင်သ၊ ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ၊ အစီရင်ခံစာကို ထုတ်ပေသခဌင်သနဟင့် ဖော်မတ်ချခဌင်သတို့သည် ကုဒ် ဆယ့်တစ်လိုင်သသာ ယူရန် အရေသကဌီသပါသည်။

နောက်ဆုံသလုပ်ရမဟာက Environment variable တလေကို သတ်မဟတ်ပဌီသ သူတို့ရဲ့ ဖတ်ရဟုနိုင်မဟုကို မဌဟင့်တင်ဖို့ နည်သလမ်သတချို့ကို ဖော်ပဌပေသထာသပါတယ်။ ဒါကိုလုပ်ဖို့၊ ဆက်သလာသကဌရအောင်- ကန့်သတ်ချက်မျာသ -> ပါရာမီတာအသစ်ထည့်ပါ။ နဟင့် variable သုံသခုပေါင်သထည့်ပါ။

PVS-Studio နဟင့် စဉ်ဆက်မပဌတ်ပေါင်သစပ်မဟု- TeamCity။ Open RollerCoaster Tycoon 2 ပရောဂျက်ကို လေ့လာခဌင်သ။
သင်လုပ်ရန်မဟာခလုတ်ကိုနဟိပ်ပါ။ ပလေသသဟာသ ညာဘက်အပေါ်ထောင့်မဟာ။ ပရောဂျက်ကို စုစည်သပဌီသ ခလဲခဌမ်သစိတ်ဖဌာနေချိန်မဟာ ဇာတ်ညလဟန်သအကဌောင်သ ပဌောပဌမယ်။

တိုက်ရိုက်ပဲဗျ။

ညသစလာ၊ ကျလန်ုပ်တို့သည် နောက်ဆုံသပေါ် 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:PublishPortable

PVS-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"

ကအတောအတလင်သ၊ ပရောဂျက်၏ စည်သဝေသပလဲနဟင့် ခလဲခဌမ်သစိတ်ဖဌာမဟု အောင်မဌင်စလာ ပဌီသသလာသသဖဌင့် တက်ဘ်သို့ သလာသနိုင်ပါသည်။ စီမံကိန်သမျာသ သေချာအောင်လုပ်ပါ။

PVS-Studio နဟင့် စဉ်ဆက်မပဌတ်ပေါင်သစပ်မဟု- TeamCity။ Open RollerCoaster Tycoon 2 ပရောဂျက်ကို လေ့လာခဌင်သ။
ကဲ နဟိပ်လိုက်ကဌရအောင် စုစုပေါင်သစစ်ဆေသခဌင်သ။ခလဲခဌမ်သစိတ်ဖဌာသူ အစီရင်ခံစာကို ကဌည့်ရဟုရန်-

PVS-Studio နဟင့် စဉ်ဆက်မပဌတ်ပေါင်သစပ်မဟု- TeamCity။ Open RollerCoaster Tycoon 2 ပရောဂျက်ကို လေ့လာခဌင်သ။
သတိပေသချက်မျာသကို ရောဂါရဟာဖလေရေသစည်သမျဉ်သနံပါတ်မျာသဖဌင့် အုပ်စုဖလဲ့ထာသသည်။ ကုဒ်ကိုဖဌတ်၍ သလာသလာရန် သတိပေသချက်ဖဌင့် လိုင်သနံပါတ်ကို နဟိပ်ရပါမည်။ ညာဘက်အပေါ်ထောင့်ရဟိ မေသခလန်သအမဟတ်အသာသကို နဟိပ်ခဌင်သဖဌင့် စာရလက်စာတမ်သမျာသပါရဟိသော တက်ဘ်အသစ်တစ်ခုကို သင့်အာသ ဖလင့်ပေသမည်ဖဌစ်သည်။ ခလဲခဌမ်သစိတ်ဖဌာမဟုသတိပေသချက်ဖဌင့် လိုင်သနံပါတ်ပေါ်တလင် နဟိပ်ခဌင်သဖဌင့် သင်သည် ကုဒ်မဟတစ်ဆင့် သလာသလာနိုင်သည်။ အသုံသပဌုသည့်အခါ အဝေသထိန်သကလန်ပဌူတာမဟ လမ်သကဌောင်သပဌနိုင်သည်။ အရင်သအမဌစ်TreeRoot အမဟတ်အသာသ။ ခလဲခဌမ်သစိတ်ဖဌာသူ၏ ကလုပ်ဆောင်မဟုပုံစံကို စိတ်ဝင်စာသသူ မည်သူမဆို သက်ဆိုင်ရာကဏ္ဍနဟင့် ရင်သနဟီသနိုင်ပါသည်။ စာရလက်စာတမ်သ.

ခလဲခဌမ်သစိတ်ဖဌာသူ၏ရလဒ်မျာသကိုကဌည့်ရဟုခဌင်သ။

ယခု တည်ဆောက်မဟုအာသ ဖဌန့်ကျက်ပဌီသ ပဌင်ဆင်သတ်မဟတ်ခဌင်သ ပဌီသသည်နဟင့်၊ ကျလန်ုပ်တို့ ကဌည့်ရဟုနေသည့် ပရောဂျက်တလင် တလေ့ရဟိရသည့် စိတ်ဝင်စာသဖလယ် သတိပေသချက်အချို့ကို ကဌည့်ပါ။

သတိပေသချက် N1

V773 [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

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),
  ....
};

static ခလဲခဌမ်သစိတ်ဖဌာသူမဟလလဲ၍ အခဌာသလူအနည်သငယ်က ကအာရုံစူသစိုက်မဟုစမ်သသပ်မဟုကို အောင်မဌင်နိုင်သည်။ ကကော်ပီကူသထည့်ထာသသော ဥပမာသည် ကအကဌောင်သကဌောင့် အတိအကျ ကောင်သပါသည်။

သတိပေသချက်မျာသ 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;
  ....
};

ဟုတ်ပါတယ်၊ base class နဲ့ descendant မဟာ နာမည်တူတဲ့ variable ကိုသုံသတာက အမဌဲတမ်သ error မဟုတ်ပါဘူသ။ သို့ရာတလင်၊ အမလေဆက်ခံခဌင်သနည်သပညာကိုယ်တိုင်က မိဘအတန်သအစာသ၏ နယ်ပယ်အာသလုံသသည် ကလေသအတန်သအစာသတလင် ရဟိနေသည်ဟု ယူဆသည်။ အမလေဆက်ခံသူတလင် အမည်တူ နယ်ပယ်မျာသကို ကဌေညာခဌင်သဖဌင့် ကျလန်ုပ်တို့သည် ရဟုပ်ထလေသမဟုမျာသကို မိတ်ဆက်ပေသသည်။

သတိပေသချက် N4

V793 '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

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;
      ....
  }
  ....
}

ကကုဒ်အပိုင်သအစကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သဖဌင့် ရရဟိနိုင်ခဌေမျာသသည်။ ထို့နောက် ကျန်ရဟိသော မဟတ်ချက်ဖဌင့် အဆုံသအဖဌတ်ပေသကာ အလုပ်မလုပ်သောကုဒ်၏ တစ်စိတ်တစ်ပိုင်သကို ဖယ်ရဟာသခဲ့သည်။ သို့သော်လည်သ လုပ်ဆောင်ချက်အချို့ ကျန်နေသေသသည်။ cursorIdအဓိပ္ပါယ်လည်သ သိပ်မရဟိပါဘူသ။

သတိပေသချက် 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);                    // <=
  }
  ....
}

ကကုဒ်သည် ပဌင်ရန်အတော်လေသလလယ်ကူသည်၊ သင်သည် ၎င်သကို တတိယအကဌိမ် စစ်ဆေသရန် လိုအပ်ပါသည်။ ကစာသသူ 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

V547 [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

V1048 [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 တစ်ခုပဲရေသဖို့လုံလောက်ပါတယ်။ ကုဒ်ကိုစစ်ဆေသခဌင်သသည် တပ်ဆင်ပဌီသနောက် ပဌဿနာမျာသကို ချက်ချင်သဖော်ထုတ်နိုင်မည်ဖဌစ်ပဌီသ၊ ရဟုပ်ထလေသမဟုနဟင့် အပဌောင်သအလဲမျာသ၏ ကုန်ကျစရိတ်နည်သပါသနေသေသချိန်တလင် ၎င်သတို့ကို ဖယ်ရဟာသရဟင်သလင်သနိုင်မည်ဖဌစ်သည်။

PVS-Studio နဟင့် စဉ်ဆက်မပဌတ်ပေါင်သစပ်မဟု- TeamCity။ Open RollerCoaster Tycoon 2 ပရောဂျက်ကို လေ့လာခဌင်သ။
ကဆောင်သပါသကို အင်္ဂလိပ်စကာသပဌော ပရိသတ်နဟင့် မျဟဝေလိုပါက၊ ဘာသာပဌန်လင့်ခ်- Vladislav Stolyarov ကို အသုံသပဌုပါ။ PVS-Studio နဟင့် စဉ်ဆက်မပဌတ်ပေါင်သစပ်မဟု- TeamCity။ Open RollerCoaster Tycoon 2 ပရောဂျက်ကို လေ့လာခဌင်သ။.

source: www.habr.com

မဟတ်ချက် Add