summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author vichang <vichang@google.com> 2018-12-03 08:46:37 -0800
committer android-build-merger <android-build-merger@google.com> 2018-12-03 08:46:37 -0800
commitbd9669cd6a7cd47dabf050479bdf8b9b0e2b6669 (patch)
tree33ee0b6b2560dfc90437061957f41b09aee2abce
parentc4cbe40fda3b3c19edc3daaefe20621483c38bb2 (diff)
parent745d594b588059cf81f8134de650df4e1e4a8d8b (diff)
Merge "Fix AndroidCharacter.getDirectionalities for unassigned Unicode code points" am: d7e22212a5 am: dfdc3a2df2
am: 745d594b58 Change-Id: Ibcdbfb1630fb4ba93d116d9581aa56d94942f1a7
-rw-r--r--core/jni/android_text_AndroidCharacter.cpp6
-rw-r--r--core/tests/coretests/src/android/text/AndroidCharacterTest.java24
2 files changed, 13 insertions, 17 deletions
diff --git a/core/jni/android_text_AndroidCharacter.cpp b/core/jni/android_text_AndroidCharacter.cpp
index 9bba13a6930e..c6ea4e10f63e 100644
--- a/core/jni/android_text_AndroidCharacter.cpp
+++ b/core/jni/android_text_AndroidCharacter.cpp
@@ -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];
diff --git a/core/tests/coretests/src/android/text/AndroidCharacterTest.java b/core/tests/coretests/src/android/text/AndroidCharacterTest.java
index d976adb14ef3..0c7e730e78e4 100644
--- a/core/tests/coretests/src/android/text/AndroidCharacterTest.java
+++ b/core/tests/coretests/src/android/text/AndroidCharacterTest.java
@@ -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];