Skip to content

Commit cd95152

Browse files
committed
Fixed crash if out of memory in the Vulkan GPU driver
1 parent 70b2d16 commit cd95152

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

src/gpu/vulkan/SDL_gpu_vulkan.c

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4785,7 +4785,7 @@ static Uint32 VULKAN_INTERNAL_CreateSwapchain(
47854785

47864786
windowData->inFlightFences[i] = NULL;
47874787
}
4788-
4788+
47894789
windowData->renderFinishedSemaphore = SDL_malloc(
47904790
sizeof(VkSemaphore) * windowData->imageCount);
47914791
for (i = 0; i < windowData->imageCount; i += 1) {
@@ -11610,7 +11610,7 @@ static bool VULKAN_PrepareDriver(SDL_VideoDevice *_this)
1161011610
{
1161111611
// Set up dummy VulkanRenderer
1161211612
VulkanRenderer *renderer;
11613-
Uint8 result;
11613+
bool result = false;
1161411614

1161511615
if (_this->Vulkan_CreateSurface == NULL) {
1161611616
return false;
@@ -11620,16 +11620,16 @@ static bool VULKAN_PrepareDriver(SDL_VideoDevice *_this)
1162011620
return false;
1162111621
}
1162211622

11623-
renderer = (VulkanRenderer *)SDL_malloc(sizeof(VulkanRenderer));
11624-
SDL_memset(renderer, '\0', sizeof(VulkanRenderer));
11625-
11626-
result = VULKAN_INTERNAL_PrepareVulkan(renderer);
11627-
11628-
if (result) {
11629-
renderer->vkDestroyInstance(renderer->instance, NULL);
11623+
renderer = (VulkanRenderer *)SDL_calloc(1, sizeof(*renderer));
11624+
if (renderer) {
11625+
result = VULKAN_INTERNAL_PrepareVulkan(renderer);
11626+
if (result) {
11627+
renderer->vkDestroyInstance(renderer->instance, NULL);
11628+
}
11629+
SDL_free(renderer);
1163011630
}
11631-
SDL_free(renderer);
1163211631
SDL_Vulkan_UnloadLibrary();
11632+
1163311633
return result;
1163411634
}
1163511635

@@ -11650,8 +11650,12 @@ static SDL_GPUDevice *VULKAN_CreateDevice(bool debugMode, bool preferLowPower, S
1165011650
return NULL;
1165111651
}
1165211652

11653-
renderer = (VulkanRenderer *)SDL_malloc(sizeof(VulkanRenderer));
11654-
SDL_memset(renderer, '\0', sizeof(VulkanRenderer));
11653+
renderer = (VulkanRenderer *)SDL_calloc(1, sizeof(*renderer));
11654+
if (!renderer) {
11655+
SDL_Vulkan_UnloadLibrary();
11656+
return false;
11657+
}
11658+
1165511659
renderer->debugMode = debugMode;
1165611660
renderer->preferLowPower = preferLowPower;
1165711661
renderer->allowedFramesInFlight = 2;

0 commit comments

Comments
 (0)