• R/O
  • HTTP
  • SSH
  • HTTPS

提交

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

frameworks/base


Commit MetaInfo

修訂31d41018707e379ae810295596d5ecd83cc23d72 (tree)
時間2019-07-12 04:10:09
作者Mihai Popa <popam@goog...>
CommiterArjun Garg

Log Message

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)

Change Summary

差異

--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -919,6 +919,9 @@ public abstract class Layout {
919919 if (limit > lineEnd) {
920920 limit = lineEnd;
921921 }
922+ if (limit == start) {
923+ continue;
924+ }
922925 level[limit - lineStart - 1] =
923926 (byte) ((runs[i + 1] >>> RUN_LEVEL_SHIFT) & RUN_LEVEL_MASK);
924927 }
@@ -1014,8 +1017,8 @@ public abstract class Layout {
10141017 }
10151018
10161019 /**
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+ *
10191022 * @param line The line giving the offsets we compute information for
10201023 * @param clamped Whether to clamp the results to the width of the layout
10211024 * @param primary Whether the results should be the primary or the secondary horizontal
@@ -1050,7 +1053,7 @@ public abstract class Layout {
10501053 TextLine.recycle(tl);
10511054
10521055 if (clamped) {
1053- for (int offset = 0; offset <= wid.length; ++offset) {
1056+ for (int offset = 0; offset < wid.length; ++offset) {
10541057 if (wid[offset] > mWidth) {
10551058 wid[offset] = mWidth;
10561059 }