OSDN Git Service

RESTRICT AUTOMERGE
authorSeigo Nonaka <nona@google.com>
Mon, 16 Sep 2019 21:49:49 +0000 (14:49 -0700)
committerHuizi Yang <yanghuiz@google.com>
Tue, 8 Oct 2019 20:08:04 +0000 (13:08 -0700)
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
(cherry picked from commit 4ce901e4058d93336dca3413dc53b81bbdf9d3e8)

core/java/android/text/TextLine.java

index 55931d8..3e9dc48 100644 (file)
@@ -239,9 +239,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;
@@ -316,9 +314,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;
@@ -405,9 +401,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;