frameworks/base
修訂 | 31d41018707e379ae810295596d5ecd83cc23d72 (tree) |
---|---|
時間 | 2019-07-12 04:10:09 |
作者 | Mihai Popa <popam@goog...> |
Commiter | Arjun Garg |
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)
(cherry picked from commit d3e81cd63f91533915feb159e0b4241729592963)
@@ -919,6 +919,9 @@ public abstract class Layout { | ||
919 | 919 | if (limit > lineEnd) { |
920 | 920 | limit = lineEnd; |
921 | 921 | } |
922 | + if (limit == start) { | |
923 | + continue; | |
924 | + } | |
922 | 925 | level[limit - lineStart - 1] = |
923 | 926 | (byte) ((runs[i + 1] >>> RUN_LEVEL_SHIFT) & RUN_LEVEL_MASK); |
924 | 927 | } |
@@ -1014,8 +1017,8 @@ public abstract class Layout { | ||
1014 | 1017 | } |
1015 | 1018 | |
1016 | 1019 | /** |
1017 | - * Computes in linear time the results of calling | |
1018 | - * #getHorizontal for all offsets on a line. | |
1020 | + * Computes in linear time the results of calling #getHorizontal for all offsets on a line. | |
1021 | + * | |
1019 | 1022 | * @param line The line giving the offsets we compute information for |
1020 | 1023 | * @param clamped Whether to clamp the results to the width of the layout |
1021 | 1024 | * @param primary Whether the results should be the primary or the secondary horizontal |
@@ -1050,7 +1053,7 @@ public abstract class Layout { | ||
1050 | 1053 | TextLine.recycle(tl); |
1051 | 1054 | |
1052 | 1055 | if (clamped) { |
1053 | - for (int offset = 0; offset <= wid.length; ++offset) { | |
1056 | + for (int offset = 0; offset < wid.length; ++offset) { | |
1054 | 1057 | if (wid[offset] > mWidth) { |
1055 | 1058 | wid[offset] = mWidth; |
1056 | 1059 | } |