diff options
author | Rich Felker <dalias@aerifal.cx> | 2018-06-01 21:50:17 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2018-06-01 21:50:17 -0400 |
commit | 165a1e37a570422c3f3f816a734bfea0366982e5 (patch) | |
tree | 924bb2601d8677c9da099dbedb338a0fd7834b1d /src/locale | |
parent | 99f4237a691349b24afbed29abf33124b89c1ea3 (diff) | |
download | musl-165a1e37a570422c3f3f816a734bfea0366982e5.tar.gz musl-165a1e37a570422c3f3f816a734bfea0366982e5.tar.bz2 musl-165a1e37a570422c3f3f816a734bfea0366982e5.tar.xz musl-165a1e37a570422c3f3f816a734bfea0366982e5.zip |
fix iconv mapping of big5-hkscs characters that map to two unicode chars
this case is handled with a recursive call to iconv using a
specially-constructed conversion descriptor. the constant 0 was used
as the offset for utf-8, since utf-8 appears first in the charmaps
table, but the offset used needs to point into the charmap entry, past
the name/aliases at the beginning, to the byte identifying the
encoding. as a result of this error, junk was produced.
instead, call find_charmap so we don't have to hard-code a nontrivial
offset. with this change, the code has been tested and found to work
in the case of converting the affected hkscs characters to utf-8.
Diffstat (limited to 'src/locale')
-rw-r--r-- | src/locale/iconv.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/locale/iconv.c b/src/locale/iconv.c index 3a34395c..05d42095 100644 --- a/src/locale/iconv.c +++ b/src/locale/iconv.c @@ -461,7 +461,7 @@ size_t iconv(iconv_t cd, char **restrict in, size_t *restrict inb, char **restri if (totype-0300U > 8) k = 2; else k = "\10\4\4\10\4\4\10\2\4"[totype-0300]; if (k > *outb) goto toobig; - x += iconv(combine_to_from(to, 0), + x += iconv(combine_to_from(to, find_charmap("utf8")), &(char *){"\303\212\314\204" "\303\212\314\214" "\303\252\314\204" |