Add exception handling in text-controller 90/263790/1
authorBowon Ryu <bowon.ryu@samsung.com>
Fri, 10 Sep 2021 05:22:20 +0000 (14:22 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Fri, 10 Sep 2021 05:34:22 +0000 (14:34 +0900)
There is a case where mGlyphPositions is cleared in Controller::Relayouter::Relayout.
At this time, if try to partially erase mGlyphPositions in ClearGlyphModelData, Assert occurs.
Because the count of mGlyphPositions is already 0.

This patch prevents this issue though a count check.

Change-Id: I00c919c75acd1d389877c55acfcd75878b28bc91
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
dali-toolkit/internal/text/text-controller-impl.cpp

index b298bf0..045fb8a 100644 (file)
@@ -507,10 +507,14 @@ void Controller::Impl::ClearGlyphModelData(CharacterIndex startIndex, CharacterI
     mModel->mVisualModel->mCharactersPerGlyph.Erase(charactersPerGlyphBuffer + mTextUpdateInfo.mStartGlyphIndex,
                                                     charactersPerGlyphBuffer + endGlyphIndexPlusOne);
 
-    // Clear the positions buffer.
-    Vector2* positionsBuffer = mModel->mVisualModel->mGlyphPositions.Begin();
-    mModel->mVisualModel->mGlyphPositions.Erase(positionsBuffer + mTextUpdateInfo.mStartGlyphIndex,
-                                                positionsBuffer + endGlyphIndexPlusOne);
+    // Should pass if mGlyphPositions has already been cleared in Controller::Relayouter::Relayout
+    if(0u != mModel->mVisualModel->mGlyphPositions.Count())
+    {
+      // Clear the positions buffer.
+      Vector2* positionsBuffer = mModel->mVisualModel->mGlyphPositions.Begin();
+      mModel->mVisualModel->mGlyphPositions.Erase(positionsBuffer + mTextUpdateInfo.mStartGlyphIndex,
+                                                  positionsBuffer + endGlyphIndexPlusOne);
+    }
   }
 
   if(NO_OPERATION != (LAYOUT & operations))