From 1c012a202ee9c0cb902933262234c0fc20f1294a Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 6 Jul 2021 15:26:45 +0200 Subject: [PATCH] Fix buffer overrun crash in `ForwardShadingFeature` --- .../Engine/Graphics/Materials/MaterialShaderFeatures.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp b/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp index 2c5dc147a..03c03414c 100644 --- a/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp +++ b/Source/Engine/Graphics/Materials/MaterialShaderFeatures.cpp @@ -97,26 +97,22 @@ void ForwardShadingFeature::Bind(MaterialShader::BindParameters& params, byte*& // Set local lights data.LocalLightsCount = 0; - for (int32 i = 0; i < cache->PointLights.Count(); i++) + for (int32 i = 0; i < cache->PointLights.Count() && data.LocalLightsCount < MaxLocalLights; i++) { const auto& light = cache->PointLights[i]; if (BoundingSphere(light.Position, light.Radius).Contains(drawCall.World.GetTranslation()) != ContainmentType::Disjoint) { light.SetupLightData(&data.LocalLights[data.LocalLightsCount], view, false); data.LocalLightsCount++; - if (data.LocalLightsCount == MaxLocalLights) - break; } } - for (int32 i = 0; i < cache->SpotLights.Count(); i++) + for (int32 i = 0; i < cache->SpotLights.Count() && data.LocalLightsCount < MaxLocalLights; i++) { const auto& light = cache->SpotLights[i]; if (BoundingSphere(light.Position, light.Radius).Contains(drawCall.World.GetTranslation()) != ContainmentType::Disjoint) { light.SetupLightData(&data.LocalLights[data.LocalLightsCount], view, false); data.LocalLightsCount++; - if (data.LocalLightsCount == MaxLocalLights) - break; } }