From b79741ec66b5496dbd257b59c3d5a6b457f4a5c6 Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Mon, 7 Mar 2016 10:39:59 -0700 Subject: layers: LX413, Fix dynamicOffsets crash in draw_state Properly handle CmdBindDescriptorSets being called multiple times consecutively. DynamicOffsets being overwritten on subsequent calls, resulting in a crash when the array was indexed out-of-bounds. --- layers/draw_state.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index 7f0b962c..40fa5f0e 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -5827,9 +5827,9 @@ VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(VkCommandBuff skipCall |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, (uint64_t) commandBuffer, __LINE__, DRAWSTATE_INVALID_DYNAMIC_OFFSET_COUNT, "DS", "Attempting to bind %u descriptorSets with %u dynamic descriptors, but dynamicOffsetCount is %u. It should exactly match the number of dynamic descriptors.", setCount, totalDynamicDescriptors, dynamicOffsetCount); } - if (dynamicOffsetCount) { - // Save dynamicOffsets bound to this CB - pCB->dynamicOffsets.assign(pDynamicOffsets, pDynamicOffsets + dynamicOffsetCount); + // Save dynamicOffsets bound to this CB + for (uint32_t i = 0; i < dynamicOffsetCount; i++) { + pCB->dynamicOffsets.emplace_back(pDynamicOffsets[i]); } } } else { -- cgit v1.2.3