Commit d3e81cd6 authored by Mihai Popa's avatar Mihai Popa Committed by Bryan Ferris

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 7ad499d0)
parent 14b074dd
......@@ -919,6 +919,9 @@ public abstract class Layout {
if (limit > lineEnd) {
limit = lineEnd;
if (limit == start) {
level[limit - lineStart - 1] =
(byte) ((runs[i + 1] >>> RUN_LEVEL_SHIFT) & RUN_LEVEL_MASK);
......@@ -1014,8 +1017,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
......@@ -1050,7 +1053,7 @@ public abstract class Layout {
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;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment