Fix heap corruption for empty descriptor pools
Bug: b/229992990
Change-Id: I69ab5e80fb5a5c7b38701e1bb665fd934aa2ccd5
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/65328
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Ari Suonpää <ari.suonpaa@siru.fi>
Commit-Queue: Ari Suonpää <ari.suonpaa@siru.fi>
Presubmit-Ready: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Vulkan/VkDescriptorSet.cpp b/src/Vulkan/VkDescriptorSet.cpp
index 65f37ac..d081567 100644
--- a/src/Vulkan/VkDescriptorSet.cpp
+++ b/src/Vulkan/VkDescriptorSet.cpp
@@ -42,7 +42,7 @@
VkDescriptorType type = layout->getDescriptorType(i, j);
uint32_t descriptorCount = layout->getDescriptorCount(i, j);
uint32_t descriptorSize = layout->getDescriptorSize(i, j);
- uint8_t *descriptorMemory = descriptorSet->data + layout->getBindingOffset(i, j);
+ uint8_t *descriptorMemory = descriptorSet->GetDataAddress() + layout->getBindingOffset(i, j);
for(uint32_t k = 0; k < descriptorCount; k++)
{
@@ -88,4 +88,10 @@
ParseDescriptors(descriptorSets, layout, device, PREPARE_FOR_SAMPLING);
}
+uint8_t *DescriptorSet::GetDataAddress()
+{
+ static_assert(sizeof(DescriptorSetHeader) == sizeof(DescriptorSet));
+ return reinterpret_cast<uint8_t *>(this) + sizeof(DescriptorSetHeader);
+}
+
} // namespace vk
\ No newline at end of file