fix erroneous utf-16 encoding with surrogates in iconv
[musl] / src / locale / iconv.c
index 30a457f..c48e45a 100644 (file)
@@ -336,6 +336,7 @@ size_t iconv(iconv_t cd0, char **in, size_t *inb, char **out, size_t *outb)
                        }
                        if (type-UCS2BE < 2U) goto ilseq;
                        if (*outb < 4) goto toobig;
+                       c -= 0x10000;
                        put_16((void *)*out, (c>>10)|0xd800, totype);
                        put_16((void *)(*out + 2), (c&0x3ff)|0xdc00, totype);
                        *out += 4;