Fix AndroidCharacter.getDirectionalities for unassigned Unicode code points
Bug: 120074586 Test: AndroidCharacterTest Change-Id: I885034429e28dfad2f417511a1e1c2a4567da73f
This commit is contained in:
@@ -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];
|
||||
|
||||
@@ -35,13 +35,10 @@ 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++;
|
||||
}
|
||||
if (cp < Character.MIN_SURROGATE || cp > Character.MAX_SURROGATE) {
|
||||
chars[index] = (char) cp;
|
||||
java_lang_results[index] = Character.getDirectionality(cp);
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,14 +57,11 @@ 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;
|
||||
}
|
||||
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];
|
||||
|
||||
Reference in New Issue
Block a user