on master help sign in
encodeUtf8_2: fix parallel range check

This makes it rather expensive, alas.

commit2ca90038e3fa5b3bb0470fe4a76974aeacf371a7 authorBryan O'Sullivan <bos@serpentine.com> dateTue 7 Jan 2014, 23:16 (13 years ago) parent17ac55d
1 file changed+4−2
cbits/cbits.c+4−2
cbits/cbits.c+4−2
@@ -253,7 +253,9 @@ _hs_text_encode_utf8(uint8_t **destp, const uint16_t *src, size_t srcoff,
253253 *dest++ = c;
254254 *dest++ = d;
255255 }
256− else if ((w & 0xF800F800F800F800ULL) == 0) {
256+ else if (!(w & 0xF800F800F800F800ULL) && (w & 0xFF80000000000000ULL) &&
257+ (w & 0x0000FF8000000000ULL) && (w & 0x00000000FF800000ULL) &&
258+ (w & 0x000000000000FF80ULL)) {
257259 *dest++ = (a >> 6) | 0xC0;
258260 *dest++ = (a & 0x3f) | 0x80;
259261 *dest++ = (b >> 6) | 0xC0;
@@ -277,7 +279,7 @@ _hs_text_encode_utf8(uint8_t **destp, const uint16_t *src, size_t srcoff,
277279 *dest++ = a;
278280 *dest++ = b;
279281 }
280− else if ((w & 0xF800F800) == 0) {
282+ else if (!(w & 0xF800F800) && (w & 0xFF800000) && (w & 0x0000FF80)) {
281283 *dest++ = (a >> 6) | 0xC0;
282284 *dest++ = (a & 0x3f) | 0x80;
283285 *dest++ = (b >> 6) | 0xC0;