[PATCH 0/1] MR8885: winevulkan: Handle NULL buffer pointer in vkFreeCommandBuffers().
From: Paul Gofman <pgofman(a)codeweavers.com> --- dlls/winevulkan/loader.c | 2 ++ dlls/winevulkan/vulkan.c | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dlls/winevulkan/loader.c b/dlls/winevulkan/loader.c index 644e0982e7a..79bbe8a2758 100644 --- a/dlls/winevulkan/loader.c +++ b/dlls/winevulkan/loader.c @@ -697,6 +697,8 @@ void WINAPI vkFreeCommandBuffers(VkDevice device, VkCommandPool cmd_pool, uint32 assert(!status); for (i = 0; i < count; i++) { + if (!buffers[i]) + continue; list_remove(&buffers[i]->pool_link); free(buffers[i]); } diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index ac93931092b..26d3a4b0c10 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -470,12 +470,14 @@ static void wine_vk_free_command_buffers(struct vulkan_device *device, struct wine_cmd_pool *pool, uint32_t count, const VkCommandBuffer *buffers) { struct vulkan_instance *instance = device->physical_device->instance; + struct wine_cmd_buffer *buffer; unsigned int i; for (i = 0; i < count; i++) { - struct wine_cmd_buffer *buffer = wine_cmd_buffer_from_handle(buffers[i]); - + if (!buffers[i]) + continue; + buffer = wine_cmd_buffer_from_handle(buffers[i]); if (!buffer) continue; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8885
From Vulkan spec:
VUID-vkFreeCommandBuffers-pCommandBuffers-00048
pCommandBuffers must be a valid pointer to an array of commandBufferCount VkCommandBuffer handles, each element of which must either be a valid handle or NULL
So NULL elements of buffers array are allowed and should be handled. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/8885#note_114609
participants (2)
-
Paul Gofman -
Paul Gofman (@gofman)