summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaph Levien <raph@google.com>2016-02-27 07:43:56 -0800
committerRaph Levien <raph@google.com>2016-02-27 07:43:56 -0800
commit1934c2c3cb2c93aa12f852f95915190f8ac81fac (patch)
tree2af03ba76cb31dd3e83373750f8c9260348dec10
parent56840e8006ca2b822adb401fc8a65f3c075cde10 (diff)
downloadandroid_frameworks_minikin-1934c2c3cb2c93aa12f852f95915190f8ac81fac.tar.gz
android_frameworks_minikin-1934c2c3cb2c93aa12f852f95915190f8ac81fac.tar.bz2
android_frameworks_minikin-1934c2c3cb2c93aa12f852f95915190f8ac81fac.zip
Fix wrong conditions in isEmojiBase
I computed ranges using low <= c || c <= high, should be &&. Bug: 26829153 Change-Id: Ic1002d90b6a408a0b415f2d117d0e57adcbc2fa9
-rw-r--r--libs/minikin/MinikinInternal.cpp30
-rw-r--r--tests/GraphemeBreakTests.cpp1
2 files changed, 16 insertions, 15 deletions
diff --git a/libs/minikin/MinikinInternal.cpp b/libs/minikin/MinikinInternal.cpp
index 7fa7ce9..175ced8 100644
--- a/libs/minikin/MinikinInternal.cpp
+++ b/libs/minikin/MinikinInternal.cpp
@@ -42,31 +42,31 @@ bool isEmojiBase(uint32_t c) {
return (c == 0x261D || c == 0x26F9 || (0x270A <= c && c <= 0x270D));
} else if (0x1F385 <= c && c <= 0x1F93E) {
return (c == 0x1F385
- || (0x1F3C3 <= c || c <= 0x1F3C4)
- || (0x1F3CA <= c || c <= 0x1F3CB)
- || (0x1F442 <= c || c <= 0x1F443)
- || (0x1F446 <= c || c <= 0x1F450)
- || (0x1F466 <= c || c <= 0x1F469)
+ || (0x1F3C3 <= c && c <= 0x1F3C4)
+ || (0x1F3CA <= c && c <= 0x1F3CB)
+ || (0x1F442 <= c && c <= 0x1F443)
+ || (0x1F446 <= c && c <= 0x1F450)
+ || (0x1F466 <= c && c <= 0x1F469)
|| c == 0x1F46E
- || (0x1F470 <= c || c <= 0x1F478)
+ || (0x1F470 <= c && c <= 0x1F478)
|| c == 0x1F47C
- || (0x1F481 <= c || c <= 0x1F483)
- || (0x1F485 <= c || c <= 0x1F487)
+ || (0x1F481 <= c && c <= 0x1F483)
+ || (0x1F485 <= c && c <= 0x1F487)
|| c == 0x1F4AA
|| c == 0x1F575
|| c == 0x1F57A
|| c == 0x1F590
- || (0x1F595 <= c || c <= 0x1F596)
- || (0x1F645 <= c || c <= 0x1F647)
- || (0x1F64B <= c || c <= 0x1F64F)
+ || (0x1F595 <= c && c <= 0x1F596)
+ || (0x1F645 <= c && c <= 0x1F647)
+ || (0x1F64B <= c && c <= 0x1F64F)
|| c == 0x1F6A3
- || (0x1F6B4 <= c || c <= 0x1F6B6)
+ || (0x1F6B4 <= c && c <= 0x1F6B6)
|| c == 0x1F6C0
- || (0x1F918 <= c || c <= 0x1F91E)
+ || (0x1F918 <= c && c <= 0x1F91E)
|| c == 0x1F926
|| c == 0x1F930
- || (0x1F933 <= c || c <= 0x1F939)
- || (0x1F93B <= c || c <= 0x1F93E));
+ || (0x1F933 <= c && c <= 0x1F939)
+ || (0x1F93B <= c && c <= 0x1F93E));
} else {
return false;
}
diff --git a/tests/GraphemeBreakTests.cpp b/tests/GraphemeBreakTests.cpp
index dbd73be..7e17203 100644
--- a/tests/GraphemeBreakTests.cpp
+++ b/tests/GraphemeBreakTests.cpp
@@ -155,6 +155,7 @@ TEST(GraphemeBreak, emojiModifiers) {
EXPECT_TRUE(IsBreak("U+2764 | U+1F3FB")); // heart + modifier
EXPECT_TRUE(IsBreak("U+2764 U+FE0E | U+1F3FB")); // heart + emoji style + modifier
EXPECT_TRUE(IsBreak("U+2764 U+FE0F | U+1F3FB")); // heart + emoji style + modifier
+ EXPECT_TRUE(IsBreak("U+1F3FB | U+1F3FB")); // modifier + modifier
// rat is not an emoji modifer
EXPECT_TRUE(IsBreak("U+1F466 | U+1F400")); // boy + rat