@@ -245,8 +245,21 @@ _hs_text_encode_utf8(uint8_t **destp, const uint16_t *src, size_t srcoff,
245245 while (srcend - src >= 4) {
246246 uint64_t w = *((uint64_t *) src);
247247
248− if (w & 0xFF80FF80FF80FF80ULL)
248+ if (w & 0xFF80FF80FF80FF80ULL) {
249+ if (!(w & 0x000000000000FF80ULL)) {
250+ *dest++ = w & 0xFFFF;
251+ src++;
252+ if (!(w & 0x00000000FF800000ULL)) {
253+ *dest++ = (w >> 16) & 0xFFFF;
254+ src++;
255+ if (!(w & 0x0000FF8000000000ULL)) {
256+ *dest++ = (w >> 32) & 0xFFFF;
257+ src++;
258+ }
259+ }
260+ }
249261 break;
262+ }
250263 *dest++ = w & 0xFFFF;
251264 *dest++ = (w >> 16) & 0xFFFF;
252265 *dest++ = (w >> 32) & 0xFFFF;