From 3acdf6e22ab3142697ccc939c4736fa62033af19 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 4 Mar 2021 17:37:13 +0100 Subject: [PATCH] [d3d11] Perform bound-checking in GetBufferSlice Ensures that we don't pass invalid buffer slices to the backend. --- src/d3d11/d3d11_buffer.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/d3d11/d3d11_buffer.h b/src/d3d11/d3d11_buffer.h index a2a94e08..3ddd61a0 100644 --- a/src/d3d11/d3d11_buffer.h +++ b/src/d3d11/d3d11_buffer.h @@ -77,15 +77,23 @@ namespace dxvk { } DxvkBufferSlice GetBufferSlice() const { - return GetBufferSlice(0, m_desc.ByteWidth); + return DxvkBufferSlice(m_buffer, 0, m_desc.ByteWidth); } DxvkBufferSlice GetBufferSlice(VkDeviceSize offset) const { - return GetBufferSlice(offset, m_desc.ByteWidth - offset); + VkDeviceSize size = m_desc.ByteWidth; + + return likely(offset < size) + ? DxvkBufferSlice(m_buffer, offset, size - offset) + : DxvkBufferSlice(); } DxvkBufferSlice GetBufferSlice(VkDeviceSize offset, VkDeviceSize length) const { - return DxvkBufferSlice(m_buffer, offset, length); + VkDeviceSize size = m_desc.ByteWidth; + + return likely(offset < size) + ? DxvkBufferSlice(m_buffer, offset, std::min(length, size - offset)) + : DxvkBufferSlice(); } DxvkBufferSlice GetSOCounter() {