Merge "Fix AndroidCharacter.getDirectionalities for unassigned Unicode code points"

am: d7e22212a5

Change-Id: Ife701b7df80626d6e81679a1a37de340ec79405b
This commit is contained in:
vichang
2018-11-30 12:12:48 -08:00
committed by android-build-merger
2 changed files with 13 additions and 17 deletions

View File

@@ -76,7 +76,8 @@ static void getDirectionalities(JNIEnv* env, jobject obj, jcharArray srcArray,
int c = 0x00010000 + ((src[i] - 0xD800) << 10) + int c = 0x00010000 + ((src[i] - 0xD800) << 10) +
(src[i + 1] & 0x3FF); (src[i + 1] & 0x3FF);
int dir = u_charDirection(c); 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; dir = PROPERTY_UNDEFINED;
else else
dir = directionality_map[dir]; dir = directionality_map[dir];
@@ -86,7 +87,8 @@ static void getDirectionalities(JNIEnv* env, jobject obj, jcharArray srcArray,
} else { } else {
int c = src[i]; int c = src[i];
int dir = u_charDirection(c); 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; dest[i] = PROPERTY_UNDEFINED;
else else
dest[i] = directionality_map[dir]; dest[i] = directionality_map[dir];

View File

@@ -35,13 +35,10 @@ public class AndroidCharacterTest {
byte[] java_lang_results = new byte[size]; byte[] java_lang_results = new byte[size];
int index = 0; int index = 0;
for (int cp = 0; cp <= Character.MAX_VALUE; cp++) { for (int cp = 0; cp <= Character.MAX_VALUE; cp++) {
// Exempt unassigned code point due to b/120074586 if (cp < Character.MIN_SURROGATE || cp > Character.MAX_SURROGATE) {
if (Character.getType(cp) != Character.UNASSIGNED) { chars[index] = (char) cp;
if (cp < Character.MIN_SURROGATE || cp > Character.MAX_SURROGATE) { java_lang_results[index] = Character.getDirectionality(cp);
chars[index] = (char) cp; index++;
java_lang_results[index] = Character.getDirectionality(cp);
index++;
}
} }
} }
@@ -60,14 +57,11 @@ public class AndroidCharacterTest {
int index = 0; int index = 0;
for (int cp = Character.MIN_SUPPLEMENTARY_CODE_POINT; cp <= Character.MAX_CODE_POINT; for (int cp = Character.MIN_SUPPLEMENTARY_CODE_POINT; cp <= Character.MAX_CODE_POINT;
cp++) { cp++) {
// Exempt unassigned code point due to b/120074586 chars[index] = Character.highSurrogate(cp);
if (Character.getType(cp) != Character.UNASSIGNED) { chars[index + 1] = Character.lowSurrogate(cp);
chars[index] = Character.highSurrogate(cp); java_lang_results[index] = java_lang_results[index + 1] = Character
chars[index + 1] = Character.lowSurrogate(cp); .getDirectionality(cp);
java_lang_results[index] = java_lang_results[index + 1] = Character index += 2;
.getDirectionality(cp);
index += 2;
}
} }
byte[] android_text_results = new byte[size]; byte[] android_text_results = new byte[size];