OSDN Git Service

RESTRICT AUTOMERGE
authorSeigo Nonaka <nona@google.com>
Mon, 16 Sep 2019 21:49:49 +0000 (14:49 -0700)
committerSterling Huber <hubers@google.com>
Mon, 30 Sep 2019 17:33:07 +0000 (17:33 +0000)
Do not compute outside given range in TextLine

This is second attempt of I646851973b3816bf9ba32dfe26748c0345a5a081
which breaks various layout test on application.
The empty string must be also handled by the TextLine since it
retrieves the default line height from the empty string.

Bug: 140632678
Test: StaticLayoutTest
Test: Manually done
Change-Id: I7089ed9b711dddd7de2b27c9c2fa0fb4cb53a735

core/java/android/text/TextLine.java

index 5de2f03..d5b115a 100644 (file)
@@ -230,9 +230,7 @@ class TextLine {
         for (int i = 0; i < runs.length; i += 2) {
             int runStart = runs[i];
             int runLimit = runStart + (runs[i+1] & Layout.RUN_LENGTH_MASK);
-            if (runLimit > mLen) {
-                runLimit = mLen;
-            }
+            if (runStart > mLen) break;
             boolean runIsRtl = (runs[i+1] & Layout.RUN_RTL_FLAG) != 0;
 
             int segstart = runStart;
@@ -307,9 +305,7 @@ class TextLine {
         for (int i = 0; i < runs.length; i += 2) {
             int runStart = runs[i];
             int runLimit = runStart + (runs[i+1] & Layout.RUN_LENGTH_MASK);
-            if (runLimit > mLen) {
-                runLimit = mLen;
-            }
+            if (runStart > mLen) break;
             boolean runIsRtl = (runs[i+1] & Layout.RUN_RTL_FLAG) != 0;
 
             int segstart = runStart;
@@ -396,9 +392,7 @@ class TextLine {
         for (int i = 0; i < runs.length; i += 2) {
             int runStart = runs[i];
             int runLimit = runStart + (runs[i + 1] & Layout.RUN_LENGTH_MASK);
-            if (runLimit > mLen) {
-                runLimit = mLen;
-            }
+            if (runStart > mLen) break;
             boolean runIsRtl = (runs[i + 1] & Layout.RUN_RTL_FLAG) != 0;
 
             int segstart = runStart;