[4.0] Add underflow preventation code 00/162100/4
authorJinho, Lee <jeano.lee@samsung.com>
Wed, 29 Nov 2017 10:16:19 +0000 (19:16 +0900)
committerJinho Lee <jeano.lee@samsung.com>
Wed, 29 Nov 2017 10:45:21 +0000 (10:45 +0000)
Change-Id: If8dcedc28a23c45912fbd46224e681cc47901525

dali-toolkit/internal/text/text-controller-impl.cpp

index c1eb0e4..a451a2a 100644 (file)
@@ -423,7 +423,8 @@ void Controller::Impl::CalculateTextUpdateIndices( Length& numberOfCharacters )
     mTextUpdateInfo.mParagraphCharacterIndex = 0u;
     numberOfCharacters = 0u;
 
-    mTextUpdateInfo.mRequestedNumberOfCharacters = mTextUpdateInfo.mNumberOfCharactersToAdd - mTextUpdateInfo.mNumberOfCharactersToRemove;
+    // prevent mTextUpdateInfo.mRequestedNumberOfCharacters value underflow
+    mTextUpdateInfo.mRequestedNumberOfCharacters = ( mTextUpdateInfo.mNumberOfCharactersToAdd < mTextUpdateInfo.mNumberOfCharactersToRemove ? 0u : mTextUpdateInfo.mNumberOfCharactersToAdd - mTextUpdateInfo.mNumberOfCharactersToRemove );
 
     // Nothing else to do if there are no paragraphs.
     return;
@@ -439,7 +440,9 @@ void Controller::Impl::CalculateTextUpdateIndices( Length& numberOfCharacters )
       // Text is being added in a new paragraph after the last character of the text.
       mTextUpdateInfo.mParagraphCharacterIndex = mTextUpdateInfo.mPreviousNumberOfCharacters;
       numberOfCharacters = 0u;
-      mTextUpdateInfo.mRequestedNumberOfCharacters = mTextUpdateInfo.mNumberOfCharactersToAdd - mTextUpdateInfo.mNumberOfCharactersToRemove;
+
+      // prevent mTextUpdateInfo.mRequestedNumberOfCharacters value underflow
+      mTextUpdateInfo.mRequestedNumberOfCharacters = ( mTextUpdateInfo.mNumberOfCharactersToAdd < mTextUpdateInfo.mNumberOfCharactersToRemove ? 0u : mTextUpdateInfo.mNumberOfCharactersToAdd - mTextUpdateInfo.mNumberOfCharactersToRemove );
 
       mTextUpdateInfo.mStartGlyphIndex = mModel->mVisualModel->mGlyphs.Count();
       mTextUpdateInfo.mStartLineIndex = mModel->mVisualModel->mLines.Count() - 1u;
@@ -491,7 +494,15 @@ void Controller::Impl::CalculateTextUpdateIndices( Length& numberOfCharacters )
     }
   }
 
-  mTextUpdateInfo.mRequestedNumberOfCharacters = numberOfCharacters + mTextUpdateInfo.mNumberOfCharactersToAdd - mTextUpdateInfo.mNumberOfCharactersToRemove;
+  // prevent mTextUpdateInfo.mRequestedNumberOfCharacters value underflow
+  if( numberOfCharacters + mTextUpdateInfo.mNumberOfCharactersToAdd < mTextUpdateInfo.mNumberOfCharactersToRemove )
+  {
+    mTextUpdateInfo.mRequestedNumberOfCharacters = 0u;
+  }
+  else
+  {
+    mTextUpdateInfo.mRequestedNumberOfCharacters = numberOfCharacters + mTextUpdateInfo.mNumberOfCharactersToAdd - mTextUpdateInfo.mNumberOfCharactersToRemove;
+  }
   mTextUpdateInfo.mStartGlyphIndex = *( mModel->mVisualModel->mCharactersToGlyph.Begin() + mTextUpdateInfo.mParagraphCharacterIndex );
 }