From 45f1be8a978b237f1f593e4981069faec6a9553b Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Fri, 3 Dec 2021 13:21:51 +0900 Subject: [PATCH 1/1] [Tizen] Fix ReuseRenderer issue when renderer is nullptr When ClippingMode is CLIP_TO_BOUNDING_BOX and it have no children, we add nullptr SceneGraph::Renderer into renderables. Previous codes are assume that that renderers are not nullptr so they just use many of memberfunctions. This patch fix the dangerous nullptr access. Change-Id: If04ff5a68ef95c27fbe43166eb64734d681bcdaa Signed-off-by: Eunki, Hong --- .../update/manager/render-instruction-processor.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/dali/internal/update/manager/render-instruction-processor.cpp b/dali/internal/update/manager/render-instruction-processor.cpp index b43b998..9f9bdd3 100644 --- a/dali/internal/update/manager/render-instruction-processor.cpp +++ b/dali/internal/update/manager/render-instruction-processor.cpp @@ -242,7 +242,7 @@ inline void AddRendererToRenderList(BufferIndex updateBufferIndex, partialRenderingCacheInfo.color = node->GetColor(updateBufferIndex); partialRenderingCacheInfo.depthIndex = node->GetDepthIndex(); - if(renderable.mRenderer) + if(DALI_LIKELY(renderable.mRenderer)) { partialRenderingCacheInfo.textureSet = renderable.mRenderer->GetTextureSet(); } @@ -369,9 +369,15 @@ inline bool TryReuseCachedRenderers(Layer& layer, size_t checkSumOld = 0; for(uint32_t index = 0; index < renderableCount; ++index) { - const Render::Renderer& renderer = renderables[index].mRenderer->GetRenderer(); - checkSumNew += reinterpret_cast(&renderer); - checkSumOld += reinterpret_cast(&renderList.GetRenderer(index)); + if(DALI_LIKELY(renderables[index].mRenderer)) + { + const Render::Renderer& renderer = renderables[index].mRenderer->GetRenderer(); + checkSumNew += reinterpret_cast(&renderer); + } + if(DALI_LIKELY(renderList.GetItem(index).mRenderer)) + { + checkSumOld += reinterpret_cast(&renderList.GetRenderer(index)); + } } if(checkSumNew == checkSumOld) { @@ -440,7 +446,7 @@ inline void RenderInstructionProcessor::SortRenderItems(BufferIndex bufferIndex, { RenderItem& item = renderList.GetItem(index); - if(item.mRenderer) + if(DALI_LIKELY(item.mRenderer)) { item.mRenderer->SetSortAttributes(mSortingHelper[index]); } @@ -462,7 +468,10 @@ inline void RenderInstructionProcessor::SortRenderItems(BufferIndex bufferIndex, { RenderItem& item = renderList.GetItem(index); - item.mRenderer->SetSortAttributes(mSortingHelper[index]); + if(DALI_LIKELY(item.mRenderer)) + { + item.mRenderer->SetSortAttributes(mSortingHelper[index]); + } // texture set mSortingHelper[index].textureSet = item.mTextureSet; -- 2.7.4