From f45b2870d18ed563b44bdcc81704bee2c17e3817 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 22 Oct 2014 23:09:44 +0100 Subject: [PATCH] Prevent crash when custom cbuffer format is larger than buffer --- .../Dialogs/ConstantBufferPreviewer.cs | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/renderdocui/Windows/Dialogs/ConstantBufferPreviewer.cs b/renderdocui/Windows/Dialogs/ConstantBufferPreviewer.cs index ebbf6359b..a9e69d8cb 100644 --- a/renderdocui/Windows/Dialogs/ConstantBufferPreviewer.cs +++ b/renderdocui/Windows/Dialogs/ConstantBufferPreviewer.cs @@ -288,10 +288,30 @@ namespace renderdocui.Controls ShaderVariable[] ret = new ShaderVariable[m_FormatOverride.Length]; - for (int i = 0; i < m_FormatOverride.Length; i++) + int i = 0; + + try { - stream.Seek(m_FormatOverride[i].offset, SeekOrigin.Begin); - ret[i] = m_FormatOverride[i].GetShaderVar(reader); + for (i = 0; i < m_FormatOverride.Length; i++) + { + stream.Seek(m_FormatOverride[i].offset, SeekOrigin.Begin); + ret[i] = m_FormatOverride[i].GetShaderVar(reader); + } + } + catch (System.IO.EndOfStreamException) + { + for (; i < m_FormatOverride.Length; i++) + { + ret[i] = new ShaderVariable(); + ret[i].name = "-"; + ret[i].type = VarType.Float; + ret[i].rows = ret[i].columns = 1; + ret[i].members = new ShaderVariable[0] { }; + ret[i].value.fv = new float[16]; + ret[i].value.uv = new uint[16]; + ret[i].value.iv = new int[16]; + ret[i].value._dv_arr = new double[16]; + } } reader.Dispose();