PVS-Studio แแแแแแแแขแแ แแก แแแแแงแแแแแแก แแ แ-แแ แแ แงแแแแแแ แแฅแขแฃแแแฃแ แ แกแชแแแแ แ แแ แแก แแแกแ แแแขแแแ แแชแแ CI แกแแกแขแแแแแแแ. แแ แแแฃแฎแแแแแแ แแแแกแ, แ แแ PVS-Studio แแ แแแฅแขแแก แแแแแแแ แแแแฅแแแก แแแแแกแแแแ แ แฃแฌแงแแแขแ แแแขแแแ แแชแแแก แกแแกแขแแแแกแแแ แจแแแซแแแแ แฉแแจแแแแแก แแฎแแแแ แ แแแแแแแแ แแ แซแแแแแแจแ, แฉแแแ แแแแ แซแแแแแ แแ แแ แแชแแกแแก แแแแแ แฃแคแ แ แแแฎแแ แฎแแแฃแแก. PVS-Studio-แก แแฎแแ แแฅแแก แแฎแแ แแแญแแ แ แแแแแแแแขแแ แแก แแแแแแแแแแ แแแแแแ แขแแชแแแกแแแแก TeamCity แคแแ แแแขแจแ - TeamCity Inspections Type. แแแแฎแแ, แ แแแแ แแฃแจแแแแก.
แแแคแแ แแแชแแ แแแแแงแแแแแฃแแ แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แจแแกแแฎแแ
แแแคแแ แแแชแแ แจแแกแฌแแแแแแ แแ แแแฅแขแแก แจแแกแแฎแแ
แแแแแ แแชแแแแ แแก แคแฃแแฅแชแแ แแ แแฅแขแแแฃแ แแแแแแแแแ - แแแแแแแแแแแแ OpenRCT2 แแ แแแฅแขแ.
แ แแแฃแแแ แแแ
แแ แแแก แแแแแแแแก แแแแแแ, แแ แแแแแ แแแแแแขแแแแ แแแกแขแแแแชแแแก แแ แแชแแกแก แแ แแแแแฌแงแแ แแ แแแแแแขแแแแ, แ แแแแกแแช แฉแแแก แแแแแแฃแขแแ แแ แแฃแจแแแแก TeamCity แกแแ แแแ แ. แฃแแแ แจแแแแแแ: localhost:{แแแ แขแ แแแแแแแแฃแแแ แแแกแขแแแแชแแแก แแ แแชแแกแจแ} (แฉแแแก แจแแแแฎแแแแแจแ localhost:9090) แแ แจแแแแขแแแแ แแแขแแ แแแแชแแแก แแแแแชแแแแแ. แจแแกแแแแก แจแแแแแ แแแแแฎแแแแแแแ:
แแแแญแแ แแ แฆแแแแแก แจแแฅแแแแแ แแ แแแฅแขแ. แจแแแแแแ, แแแ แฉแแแ แฎแแแแ แแ แจแแแแกแแ แแแแแแ.
แฆแแแแแแ แแแญแแ แแก แจแแแแแ แจแแฅแแแ, แฉแแแ แแแแกแแแแแแ แคแแแฏแแ แ แแแ แแแแขแ แแแแ.
แแแแแ แแแแแญแแ แแ แจแแฅแแแแแ build แแแแคแแแฃแ แแชแแ.
แจแแแแกแแ แแแแแแ แแ แแแแฌแแแแฃแแแ แจแแฅแแแ. แฉแแแ แแฎแแแแแ แคแแแฏแแ แแก, แ แแแแแแช แแแฎแแแ แแแ แฉแแแ แแแ แกแแแก แแแแขแ แแแแก แกแแกแขแแแ. แแแแแแแแ แฌแงแแ แแแแ แฃแแแ แแแแแแ แแแแก แแแแแแแแ แแแแ, แแแแฌแแแแฃแแแ แแแแแแ แ.
แแแแแก แแแแแแแแแแ แ แแ แแแฅแขแแก แแแ แแแแขแ แแแแ.
แแแแแ แแแแแแแขแแ แแกแแแแแแแก แแแแแฏแแแ, แแแแก แแแกแแแแแแแแแ แแแแญแแ แแ: Build แแแแแฏแแแ -> Build Step-แแก แแแแแขแแแ.
แแฅ แแแ แฉแแแ:
- Runner แขแแแ -> Command Line
- แแแจแแแแ -> แแแ แแแแฃแแ แกแแ แแแขแ
แแแแแแแแ แฉแแแ แแแแแแฎแแ แชแแแแแแ แแแแแแแก แแ แแแฅแขแแก แจแแแแแแแก แแ แแก, แแฌแงแแแ แแ แแแแแแแ แฃแแแ แแงแแก แแ แแ แแแแแฏแ, แแแแขแแ แจแแแแกแแ แแแแ แกแแแแแ แกแแ แแแขแ:
แชแแแแแฃแ แแแแแฏแแแก แแแแแแแแแแแ แแแแแแฎแแแแแ. แแแแจแแแแแแแแแแ, แ แแ แแแแแแแแขแแ แแก แฉแแขแแแ แแแแก, แแ แแแฅแขแแก แแฌแงแแแแก, แแแก แแแแแแแก, แแแแแ แแจแแก แแแแแขแแแแก แแ แแแก แคแแ แแแขแแ แแแแก แแฎแแแแ แแแ แแแแขแ แฎแแแ แกแญแแ แแแแ.
แแแแ, แ แแช แฃแแแ แแแแแแแแแ, แแ แแก แแแ แแแแก แชแแแแแแแแก แแแงแแแแแ, แ แแช แแ แแแแแแแฅแแ แ แแแแแแแแ แแแ แแแแ แฌแแแแแฎแแแก แแแกแแฃแแฏแแแแกแแแแแ. แแแแกแแแแแก แแแแแ แแแแแแแแแ: แแแ แแแแขแ แแแ -> แแฎแแแ แแแ แแแแขแ แแก แแแแแขแแแ แแ แแแแแแขแแ แกแแแ แชแแแแแ:
แกแแแแแ แแกแแ แแแแญแแ แแ แฆแแแแแก แแแกแแจแแแแแ แแแแ แแแ แฏแแแแ แแฃแแฎแแจแ. แกแแแแ แแ แแแฅแขแแก แแฌแงแแแ แแ แแแแแแแ แแแแแแแแ แแแแก, แกแชแแแแ แแ แแแแแงแแแแแ.
แแแ แแแแแ แกแชแแแแ แ
แแแ แแแ แ แแแจแ, แฉแแแ แฃแแแ แแแแแแแฌแแ แแ แฃแแฎแแแกแ 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"
แแแแกแแแแจแ แแ แแแฅแขแแก แแฌแงแแแ แแ แแแแแแแ แฌแแ แแแขแแแแ แแแกแ แฃแแแ, แจแแแแแซแแแ แแแแแแแแแ แฉแแแแ แแแ แแ แแแฅแขแแแ ะธ แฃะฑะตะดะธัััั ะฒ ััะพะผ.
แแฎแแ แแแแแฌแแแแฃแแแ แแแกแแแฅแขแแ แแแแก แกแฃแแแแแแแแ แแแแแแแแขแแ แแก แแแแแ แแจแแก แกแแแแฎแแแแ:
แแแคแ แแฎแแแแแแแ แแแฏแแฃแคแแแฃแแแ แแแแแแแกแขแแแฃแ แ แฌแแกแแแแก แแแแ แแแแ. แแแแแก แแแแแแแชแแแกแแแแก, แแฅแแแ แฃแแแ แแแแญแแ แแ แฎแแแแก แแแแแ แก แแแคแ แแฎแแแแแแ. แแแแ แแแ แฏแแแแ แแฃแแฎแแจแ แแแแฎแแแก แแแจแแแแ แแแฌแแแแฃแแแแแ แแฅแแแ แแแฎแกแแแ แแฎแแ แฉแแแแ แแก แแแแฃแแแแขแแชแแแกแแแ แแ แแแ. แแฅแแแ แแกแแแ แจแแแแซแแแแ แแแแแแแชแแ แแแแแก แแแจแแแแแแ แแแแแแแแขแแ แแก แแแคแ แแฎแแแแแแก แฎแแแแก แแแแแ แแ แแแฌแแแแฃแแแแแ. แแแแแงแแแแแแกแแก แจแแกแแซแแแแแแแ แแแแแแแชแแ แแแกแขแแแชแแฃแ แ แแแแแแฃแขแแ แแแแ SourceTreeRoot แแแ แแแ แ. แแแกแแช แแแแขแแ แแกแแแก แแแแแแแแขแแ แแก แแฃแจแแแแแก แแก แ แแแแแ, แจแแฃแซแแแ แแแแชแแแก แจแแกแแแแแแก แแแแงแแคแแแแแแก
แแแแแแแแขแแ แแก แจแแแแแแแแก แแแฎแแ
แแฎแแ, แ แแแแกแแช แฉแแแ แแแแแกแ แฃแแแ แแแแกแขแ แฃแฅแชแแแก แแแแแแแแแ แแ แแแแคแแแฃแ แแชแแ, แแแแแ แแแแแแฎแแแแ แ แแแแแแแแ แกแแแแขแแ แแกแ แแแคแ แแฎแแแแแแก, แ แแแแแแช แแแแแแแแ แแ แแแฅแขแจแ, แ แแแแแกแแช แฉแแแ แแฃแงแฃแ แแแ.
แแแคแ แแฎแแแแแ N1
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
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
struct RCT12SpriteBase
{
....
uint8_t flags;
....
};
struct rct1_peep : RCT12SpriteBase
{
....
uint8_t flags;
....
};
แ แ แแฅแแ แฃแแแ, แแแแแ แกแแฎแแแแก แชแแแแแแก แแแแแงแแแแแ แกแแแแแ แแแแกแจแ แแ แจแแแแแแแแแแจแ แงแแแแแแแแก แแ แแ แแก แจแแชแแแแ. แแฃแแชแ, แแแแแแแแ แแแแแแ แขแแฅแแแแแแแ แแแแแกแแแแแ แแแ แแฃแแแแก, แ แแ แแจแแแแแก แแแแกแแก แงแแแแ แแแแ แแแงแแคแแแ แแแแจแแแก แแแแกแจแ. แแแแแแแแ แแจแ แแแแแ แกแแฎแแแฌแแแแแแก แแแแแแแก แแแแแชแฎแแแแแแ, แฉแแแ แแแแ แแแแ แแแแแแฃแแแแแก.
แแแคแ แแฎแแแแแ N4
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
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
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
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
void CustomListView::MouseUp(....)
{
....
if (!ColumnHeaderPressedCurrentState)
{
ColumnHeaderPressed = std::nullopt;
ColumnHeaderPressedCurrentState = false;
Invalidate();
}
}
แแแแ แกแแแแแแ แฃแชแแแฃแ แแ แแแแแแงแฃแ แแแ. แแแฉแแแแแแ, แ แแ แแงแ แจแแชแแแแ แแแ แแแแ แแ แชแแแแแแก แฎแแแแฎแแ แแแแแญแแแแกแแก ColumnHeaderPressedCurrentState แ แแช แแแแก แแแจแแแแก, แงแแแแ.
แแแแแงแแแแแก
แ แแแแ แช แแฎแแแแแ, PVS-Studio แกแขแแขแแแฃแ แ แแแแแแแแขแแ แแก แแฅแแแแก TeamCity แแ แแแฅแขแจแ แแแขแแแ แแ แแแ แกแแแแแแ แแแ แขแแแแ. แแแแกแแแแแก แกแแแแแ แแกแแ แแฎแแแแ แแ แแ แแชแแ แ แแแแคแแแฃแ แแชแแแก แคแแแแแก แแแฌแแ แ. แแแแแก แจแแแแฌแแแแ แกแแจแฃแแแแแแก แแแแชแแแ แแแแแชแแแ แแ แแแแแแแแ แจแแแ แแแแกแแแแแแ, แ แแช แฎแแแก แจแแฃแฌแงแแแก แแแ แแฆแแแคแฎแแ แแก, แ แแแแกแแช แชแแแแแแแแแแก แกแแ แแฃแแ แแ แฆแแ แแแฃแแแแ แฏแแ แแแแแ แแแแแแแ.
แแฃ แแกแฃแ แ แแแฃแแแแ แแ แแก แกแขแแขแแ แแแแแแกแฃแ แแแแแแ แแฃแแแขแแ แแแก, แแแฎแแแ, แแแแแแงแแแแ แแแ แแแแแแก แแแฃแแ: แแแแแแกแแแ แกแขแแแแแ แแแ.
แฌแงแแ แ: www.habr.com