Make sure count is 0 in out of memory conditions
This prevents a crash if the caller assumes that they can always dereference the returned pointer if there is a non-zero count.
This commit is contained in:
parent
47deebe23f
commit
c5f570b30b
|
@ -361,12 +361,12 @@ SDL_JoystickID *SDL_GetJoysticks(int *count)
|
||||||
total_joysticks += SDL_joystick_drivers[i]->GetCount();
|
total_joysticks += SDL_joystick_drivers[i]->GetCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count) {
|
|
||||||
*count = total_joysticks;
|
|
||||||
}
|
|
||||||
|
|
||||||
joysticks = (SDL_JoystickID *)SDL_malloc((total_joysticks + 1) * sizeof(*joysticks));
|
joysticks = (SDL_JoystickID *)SDL_malloc((total_joysticks + 1) * sizeof(*joysticks));
|
||||||
if (joysticks) {
|
if (joysticks) {
|
||||||
|
if (count) {
|
||||||
|
*count = total_joysticks;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < SDL_arraysize(SDL_joystick_drivers); ++i) {
|
for (i = 0; i < SDL_arraysize(SDL_joystick_drivers); ++i) {
|
||||||
num_joysticks = SDL_joystick_drivers[i]->GetCount();
|
num_joysticks = SDL_joystick_drivers[i]->GetCount();
|
||||||
for (device_index = 0; device_index < num_joysticks; ++device_index) {
|
for (device_index = 0; device_index < num_joysticks; ++device_index) {
|
||||||
|
@ -379,6 +379,10 @@ SDL_JoystickID *SDL_GetJoysticks(int *count)
|
||||||
SDL_assert(joystick_index == total_joysticks);
|
SDL_assert(joystick_index == total_joysticks);
|
||||||
joysticks[joystick_index] = 0;
|
joysticks[joystick_index] = 0;
|
||||||
} else {
|
} else {
|
||||||
|
if (count) {
|
||||||
|
*count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_OutOfMemory();
|
SDL_OutOfMemory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,12 +115,12 @@ SDL_SensorID *SDL_GetSensors(int *count)
|
||||||
total_sensors += SDL_sensor_drivers[i]->GetCount();
|
total_sensors += SDL_sensor_drivers[i]->GetCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count) {
|
|
||||||
*count = total_sensors;
|
|
||||||
}
|
|
||||||
|
|
||||||
sensors = (SDL_SensorID *)SDL_malloc((total_sensors + 1) * sizeof(*sensors));
|
sensors = (SDL_SensorID *)SDL_malloc((total_sensors + 1) * sizeof(*sensors));
|
||||||
if (sensors) {
|
if (sensors) {
|
||||||
|
if (count) {
|
||||||
|
*count = total_sensors;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < SDL_arraysize(SDL_sensor_drivers); ++i) {
|
for (i = 0; i < SDL_arraysize(SDL_sensor_drivers); ++i) {
|
||||||
num_sensors = SDL_sensor_drivers[i]->GetCount();
|
num_sensors = SDL_sensor_drivers[i]->GetCount();
|
||||||
for (device_index = 0; device_index < num_sensors; ++device_index) {
|
for (device_index = 0; device_index < num_sensors; ++device_index) {
|
||||||
|
@ -133,6 +133,10 @@ SDL_SensorID *SDL_GetSensors(int *count)
|
||||||
SDL_assert(sensor_index == total_sensors);
|
SDL_assert(sensor_index == total_sensors);
|
||||||
sensors[sensor_index] = 0;
|
sensors[sensor_index] = 0;
|
||||||
} else {
|
} else {
|
||||||
|
if (count) {
|
||||||
|
*count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_OutOfMemory();
|
SDL_OutOfMemory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue