Add safety checks to material constants binding code to prevent invalid memory access

This commit is contained in:
Wojtek Figat
2021-07-06 15:41:16 +02:00
parent 9f9d946d69
commit a165b4aa79
14 changed files with 85 additions and 55 deletions

View File

@@ -36,9 +36,10 @@ void DecalMaterialShader::Bind(BindParameters& params)
auto context = params.GPUContext;
auto& view = params.RenderContext.View;
auto& drawCall = *params.FirstDrawCall;
byte* cb = _cbData.Get();
auto materialData = reinterpret_cast<DecalMaterialShaderData*>(cb);
cb += sizeof(DecalMaterialShaderData);
Span<byte> cb(_cbData.Get(), _cbData.Count());
ASSERT_LOW_LAYER(cb.Length() >= sizeof(DecalMaterialShaderData));
auto materialData = reinterpret_cast<DecalMaterialShaderData*>(cb.Get());
cb = Span<byte>(cb.Get() + sizeof(DecalMaterialShaderData), cb.Length() - sizeof(DecalMaterialShaderData));
int32 srv = 0;
const bool isCameraInside = OrientedBoundingBox(Vector3::Half, params.FirstDrawCall->World).Contains(view.Position) == ContainmentType::Contains;