summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2020-09-08 20:54:47 -0500
committerJeff Epler <jepler@gmail.com>2020-09-08 20:58:48 -0500
commite82940697c777160fc382e4927b60b3ac9d3f447 (patch)
tree0a64336f357200cc86357b7cfdd1da2c58078445
parent365d69e831475f425b5b7da91962b1eb0bf4c6f9 (diff)
Fix decompression of unicode values above 2047
Two problems: The lead byte for 3-byte sequences was wrong, and one mid-byte was not even filled in due to a missing "++"! Apparently this was broken ever since the first "Compress as unicode, not bytes" commit, but I believed I'd "tested" it by running on the Pinyin translation. This rendered at least the Korean and Japanese translations completely illegible, affecting 5.0 and all later releases.
-rw-r--r--supervisor/shared/translate.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/supervisor/shared/translate.c b/supervisor/shared/translate.c
index 187d5ff8a..6218ff461 100644
--- a/supervisor/shared/translate.c
+++ b/supervisor/shared/translate.c
@@ -51,8 +51,8 @@ STATIC int put_utf8(char *buf, int u) {
*buf = 0b10000000 | (u & 0b00111111);
return 2;
} else { // u <= 0xffff)
- *buf++ = 0b11000000 | (u >> 12);
- *buf = 0b10000000 | ((u >> 6) & 0b00111111);
+ *buf++ = 0b11100000 | (u >> 12);
+ *buf++ = 0b10000000 | ((u >> 6) & 0b00111111);
*buf = 0b10000000 | (u & 0b00111111);
return 3;
}