From 71b6e2b321fd9d537fd351d6aa019cff01cdc07f Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 15 Jun 2021 16:24:25 +0100 Subject: [PATCH] Speculative crash fix, protect against invalid indices in cbuffer tag --- .../PipelineState/D3D12PipelineStateViewer.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp index e32ea4bc8..87371090d 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp @@ -552,11 +552,21 @@ ResourceId D3D12PipelineStateViewer::GetResource(RDTreeWidgetItem *item) if(cb.idx == ~0U) { - // unused cbuffer, open regular buffer viewer - const D3D12Pipe::ConstantBuffer &buf = - m_Ctx.CurD3D12PipelineState()->rootElements[cb.rootElement].constantBuffers[cb.reg]; + if(cb.rootElement < m_Ctx.CurD3D12PipelineState()->rootElements.size()) + { + const D3D12Pipe::RootSignatureRange &range = + m_Ctx.CurD3D12PipelineState()->rootElements[cb.rootElement]; - return buf.resourceId; + if(cb.reg < range.constantBuffers.size()) + { + // unused cbuffer, open regular buffer viewer + const D3D12Pipe::ConstantBuffer &buf = range.constantBuffers[cb.reg]; + + return buf.resourceId; + } + } + + return ResourceId(); } return m_Ctx.CurPipelineState().GetConstantBuffer(stage->stage, cb.idx, cb.arrayIdx).resourceId;