Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 749d1848 authored by Victor Chang's avatar Victor Chang
Browse files

Fix AndroidCharacter.getDirectionalities for unassigned Unicode code points

Bug: 120074586
Test: AndroidCharacterTest
Change-Id: I885034429e28dfad2f417511a1e1c2a4567da73f
parent c1463ecc
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -76,7 +76,8 @@ static void getDirectionalities(JNIEnv* env, jobject obj, jcharArray srcArray,
            int c = 0x00010000 + ((src[i] - 0xD800) << 10) +
                                 (src[i + 1] & 0x3FF);
            int dir = u_charDirection(c);
            if (dir < 0 || dir > JAVA_LANG_CHARACTER_MAX_DIRECTIONALITY)
            if (dir < 0 || dir > JAVA_LANG_CHARACTER_MAX_DIRECTIONALITY
                    || u_charType(c) == U_UNASSIGNED)
                dir = PROPERTY_UNDEFINED;
            else
                dir = directionality_map[dir];
@@ -86,7 +87,8 @@ static void getDirectionalities(JNIEnv* env, jobject obj, jcharArray srcArray,
        } else {
            int c = src[i];
            int dir = u_charDirection(c);
            if (dir < 0 || dir > JAVA_LANG_CHARACTER_MAX_DIRECTIONALITY)
            if (dir < 0 || dir > JAVA_LANG_CHARACTER_MAX_DIRECTIONALITY
                    || u_charType(c) == U_UNASSIGNED)
                dest[i] = PROPERTY_UNDEFINED;
            else
                dest[i] = directionality_map[dir];
+9 −15
Original line number Diff line number Diff line
@@ -35,15 +35,12 @@ public class AndroidCharacterTest {
        byte[] java_lang_results = new byte[size];
        int index = 0;
        for (int cp = 0; cp <= Character.MAX_VALUE; cp++) {
            // Exempt unassigned code point due to b/120074586
            if (Character.getType(cp) != Character.UNASSIGNED) {
            if (cp < Character.MIN_SURROGATE || cp > Character.MAX_SURROGATE) {
                chars[index] = (char) cp;
                java_lang_results[index] = Character.getDirectionality(cp);
                index++;
            }
        }
        }

        byte[] android_text_results = new byte[size];
        AndroidCharacter.getDirectionalities(chars, android_text_results, index);
@@ -60,15 +57,12 @@ public class AndroidCharacterTest {
        int index = 0;
        for (int cp = Character.MIN_SUPPLEMENTARY_CODE_POINT; cp <= Character.MAX_CODE_POINT;
                cp++) {
            // Exempt unassigned code point due to b/120074586
            if (Character.getType(cp) != Character.UNASSIGNED) {
            chars[index] = Character.highSurrogate(cp);
            chars[index + 1] = Character.lowSurrogate(cp);
            java_lang_results[index] = java_lang_results[index + 1] = Character
                    .getDirectionality(cp);
            index += 2;
        }
        }

        byte[] android_text_results = new byte[size];
        AndroidCharacter.getDirectionalities(chars, android_text_results, index);