Dali-toolkit: Text controls crash fix 50/245350/1
authorali198724 <ali198724@gmail.com>
Wed, 7 Oct 2020 11:42:41 +0000 (14:42 +0300)
committerali198724 <ali198724@gmail.com>
Wed, 7 Oct 2020 11:42:53 +0000 (14:42 +0300)
Fix crash when delete characters after change text color

Run demo, then press backspace
```
//g++ -g -O0 main.cpp -o app `pkg-config --cflags --libs dali2-core dali2-adaptor dali2-adaptor-integration  dali2-toolkit`

using namespace Dali;
using namespace Dali::Toolkit;

class SimpleApp : public ConnectionTracker
{
public:
  SimpleApp(Application& application)
  : mApplication(application)
  {
    mApplication.InitSignal().Connect(this, &SimpleApp::Create);
  }

  void Create(Application& application)
  {
    Window window = application.GetWindow();
    window.SetBackgroundColor(Vector4(0.04f, 0.345f, 0.392f, 1.0f));

    TextField field = TextField::New();
    field.SetProperty(TextField::Property::TEXT, "Erase");
    field.SetProperty(TextField::Property::TEXT_COLOR, Vector4(0.0f, 1.0f, 1.0f, 1.0f)); // CYAN
    field.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
    field.SetProperty(Actor::Property::SIZE, Vector2(300.f, 60.f));
    window.Add(field);
    field.SetKeyInputFocus();
  }

private:
  Application& mApplication;
};

int DALI_EXPORT_API main(int argc, char** argv)
{
  Application application = Application::New(&argc, &argv);
  SimpleApp test(application);
  application.MainLoop();

  return 0;
}

```

Change-Id: I2c13330f92746c73d32da71cced15c3b297126dc

dali-toolkit/internal/text/text-run-container.h

index 3b54d5c..5af8c55 100644 (file)
@@ -178,6 +178,9 @@ void UpdateCharacterRuns( CharacterIndex index,
     {
       T& run = *it;
 
+      if (run.characterRun.numberOfCharacters == 0)
+       continue;
+
       const CharacterIndex lastRunIndex = run.characterRun.characterIndex + run.characterRun.numberOfCharacters - 1u;
 
       if( lastRunIndex < index )
@@ -240,6 +243,9 @@ void UpdateCharacterRuns( CharacterIndex index,
     {
       T& run = *it;
 
+      if (run.characterRun.numberOfCharacters == 0)
+       continue;
+
       // Update the number of characters of the style run.
 
       if( ( 0u == index ) && ( 0u == run.characterRun.characterIndex ) )