summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMihai Popa <popam@google.com>2019-06-25 11:15:18 +0100
committerBryan Ferris <bferris@google.com>2019-07-10 18:02:01 +0000
commit9109ce6b0af6fc94b79cf855a10d85e107c768c2 (patch)
treed8f2bbe19bdecc09b7f241326a5a95c4e83f6fd7
parentb2964b295652505432ab37affe95f73785499e15 (diff)
downloadbase-9109ce6b0af6fc94b79cf855a10d85e107c768c2.tar.gz
Fix Layout.primaryIsTrailingPreviousAllLineOffsets
The CL fixes a crash in Layout.primaryIsTrailingPreviousAllLineOffsets. The crash was happening when the method was called for a line beginning with an empty bidi run. This could happen, for example, for empty text - I was unable to find any other case. The CL improves the existing test for the method with this case, which was previously crashing. The CL also fixes a potential crash in getLineHorizontals. However, this bug could never happen as in the current code path clamped is always false (and kept as parameter for parity with getHorizontal). Bug: 135444178 Bug: 78464361 Test: atest FrameworksCoreTests:android.text.LayoutTest\#testPrimaryIsTrailingPrevious Change-Id: I47157abe1d74675884734e3810628a566e40c1b4 (cherry picked from commit 7ad499d00716f45fffdf7331493ed21d1b8d9b77)
-rw-r--r--core/java/android/text/Layout.java9
1 files changed, 6 insertions, 3 deletions
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index c6f73cb47576..c02f7ef65a77 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -1099,6 +1099,9 @@ public abstract class Layout {
if (limit > lineEnd) {
limit = lineEnd;
}
+ if (limit == start) {
+ continue;
+ }
level[limit - lineStart - 1] =
(byte) ((runs[i + 1] >>> RUN_LEVEL_SHIFT) & RUN_LEVEL_MASK);
}
@@ -1194,8 +1197,8 @@ public abstract class Layout {
}
/**
- * Computes in linear time the results of calling
- * #getHorizontal for all offsets on a line.
+ * Computes in linear time the results of calling #getHorizontal for all offsets on a line.
+ *
* @param line The line giving the offsets we compute information for
* @param clamped Whether to clamp the results to the width of the layout
* @param primary Whether the results should be the primary or the secondary horizontal
@@ -1230,7 +1233,7 @@ public abstract class Layout {
TextLine.recycle(tl);
if (clamped) {
- for (int offset = 0; offset <= wid.length; ++offset) {
+ for (int offset = 0; offset < wid.length; ++offset) {
if (wid[offset] > mWidth) {
wid[offset] = mWidth;
}