From a159af9cfea534600ddd9be5fee43cc377e0480f Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 24 Jan 2018 22:52:25 +0000 Subject: [PATCH] Fix overrunning vector bounds if vertex attributes use high locations --- renderdoc/driver/vulkan/vk_postvs.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_postvs.cpp b/renderdoc/driver/vulkan/vk_postvs.cpp index 0d0de3386..3092a66fe 100644 --- a/renderdoc/driver/vulkan/vk_postvs.cpp +++ b/renderdoc/driver/vulkan/vk_postvs.cpp @@ -1222,7 +1222,7 @@ void VulkanReplay::InitPostVSBuffers(uint32_t eventId) }; std::vector attrIsInstanced; - std::vector vbuffers; + CompactedAttrBuffer vbuffers[64] = {}; { VkWriteDescriptorSet descWrites[64]; @@ -1260,12 +1260,18 @@ void VulkanReplay::InitPostVSBuffers(uint32_t eventId) GetBufferData(state.vbuffers[vb].buf, offs, len, origVBs[vb]); } - vbuffers.resize(vi->vertexAttributeDescriptionCount); for(uint32_t i = 0; i < vi->vertexAttributeDescriptionCount; i++) { const VkVertexInputAttributeDescription &attrDesc = vi->pVertexAttributeDescriptions[i]; uint32_t attr = attrDesc.location; + RDCASSERT(attr < 64); + if(attr >= ARRAY_COUNT(vbuffers)) + { + RDCERR("Attribute index too high! Resize array."); + continue; + } + bool isInstanced = false; size_t stride = 1;