1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-06 06:32:56 +01:00

Fix null pointers reported by launchpad builders (#12168)

This commit is contained in:
Michał Janiszewski
2020-07-09 23:52:14 +02:00
committed by GitHub
parent b1600e14ae
commit dbf00956b5
2 changed files with 24 additions and 10 deletions

View File

@@ -2474,9 +2474,10 @@ static void window_ride_main_update(rct_window* w)
return;
Vehicle* vehicle = GetEntity<Vehicle>(vehicleSpriteIndex);
if (vehicle->status != VEHICLE_STATUS_TRAVELLING && vehicle->status != VEHICLE_STATUS_TRAVELLING_CABLE_LIFT
&& vehicle->status != VEHICLE_STATUS_TRAVELLING_DODGEMS
&& vehicle->status != VEHICLE_STATUS_TRAVELLING_BOAT)
if (vehicle == nullptr
|| (vehicle->status != VEHICLE_STATUS_TRAVELLING && vehicle->status != VEHICLE_STATUS_TRAVELLING_CABLE_LIFT
&& vehicle->status != VEHICLE_STATUS_TRAVELLING_DODGEMS
&& vehicle->status != VEHICLE_STATUS_TRAVELLING_BOAT))
{
return;
}
@@ -2683,14 +2684,17 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, void* argumen
{
auto ride = get_ride(w->number);
if (ride == nullptr)
return 0;
return STR_EMPTY;
auto vehicleIndex = w->ride.view - 1;
auto vehicleSpriteIndex = ride->vehicles[vehicleIndex];
if (vehicleSpriteIndex == SPRITE_INDEX_NULL)
return 0;
return STR_EMPTY;
auto vehicle = GetEntity<Vehicle>(vehicleSpriteIndex);
if (vehicle == nullptr)
return STR_EMPTY;
if (vehicle->status != VEHICLE_STATUS_CRASHING && vehicle->status != VEHICLE_STATUS_CRASHED)
{
int32_t trackType = vehicle->GetTrackType();
@@ -4063,7 +4067,11 @@ static void window_ride_maintenance_dropdown(rct_window* w, rct_widgetindex widg
uint16_t spriteId = ride->vehicles[i];
while (spriteId != SPRITE_INDEX_NULL)
{
vehicle = GET_VEHICLE(spriteId);
vehicle = GetEntity<Vehicle>(spriteId);
if (vehicle == nullptr)
{
break;
}
vehicle->ClearUpdateFlag(
VEHICLE_UPDATE_FLAG_BROKEN_CAR | VEHICLE_UPDATE_FLAG_ZERO_VELOCITY
| VEHICLE_UPDATE_FLAG_BROKEN_TRAIN);
@@ -4076,11 +4084,17 @@ static void window_ride_maintenance_dropdown(rct_window* w, rct_widgetindex widg
case BREAKDOWN_DOORS_STUCK_CLOSED:
case BREAKDOWN_DOORS_STUCK_OPEN:
vehicle = GetEntity<Vehicle>(ride->vehicles[ride->broken_vehicle]);
vehicle->ClearUpdateFlag(VEHICLE_UPDATE_FLAG_BROKEN_CAR);
if (vehicle != nullptr)
{
vehicle->ClearUpdateFlag(VEHICLE_UPDATE_FLAG_BROKEN_CAR);
}
break;
case BREAKDOWN_VEHICLE_MALFUNCTION:
vehicle = GetEntity<Vehicle>(ride->vehicles[ride->broken_vehicle]);
vehicle->ClearUpdateFlag(VEHICLE_UPDATE_FLAG_BROKEN_TRAIN);
if (vehicle != nullptr)
{
vehicle->ClearUpdateFlag(VEHICLE_UPDATE_FLAG_BROKEN_TRAIN);
}
break;
}
ride->lifecycle_flags &= ~(RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN);

View File

@@ -337,7 +337,7 @@ rct_window* window_staff_open(Peep* peep)
window_init_scroll_widgets(w);
window_staff_viewport_init(w);
if (GetEntity<Peep>(w->number)->State == PEEP_STATE_PICKED)
if (peep->State == PEEP_STATE_PICKED)
window_event_mouse_up_call(w, WIDX_CHECKBOX_3);
return w;
@@ -352,7 +352,7 @@ void window_staff_disable_widgets(rct_window* w)
Peep* peep = GetEntity<Peep>(w->number);
uint64_t disabled_widgets = (1 << WIDX_TAB_4);
if (peep->StaffType == STAFF_TYPE_SECURITY)
if (peep != nullptr && peep->StaffType == STAFF_TYPE_SECURITY)
{
disabled_widgets |= (1 << WIDX_TAB_2);
}