From: Eunki, Hong Date: Fri, 3 Dec 2021 04:21:51 +0000 (+0900) Subject: [Tizen] Fix ReuseRenderer issue when renderer is nullptr X-Git-Tag: accepted/tizen/6.5/unified/20211212.212841~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=45f1be8a978b237f1f593e4981069faec6a9553b;hp=cd1e39a2b06eb28a5e1fc8d30fbdff66e47c0152;p=platform%2Fcore%2Fuifw%2Fdali-core.git [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 --- 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;