Date: Sun, 1 Nov 2015 21:02:30 +0000 (UTC) From: Baptiste Daroussin <bapt@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r290240 - projects/collation/lib/libc/locale Message-ID: <201511012102.tA1L2Ubi026119@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: bapt Date: Sun Nov 1 21:02:30 2015 New Revision: 290240 URL: https://svnweb.freebsd.org/changeset/base/290240 Log: locales: Fix eucJP sorting (broken upstream?) Sorting eucJP text with "sort" resulted in an illegal sequence while "gsort" worked. This was traced back to mbrtowc handling which was broken for eucJP (probably eucCN, eucKR, and eucTW as well). This small fix took hours to figure out. The OR operation to build the wide character requires an unsigned character to work correctly. The euc wcrtowc conversion is probably broken upstream in Illumos as well. Triggered by: misc/freebsd-doc-ja in ports (encoded in eucJP) Submitted by: marino Obtained from: DragonflyBSD Modified: projects/collation/lib/libc/locale/euc.c Modified: projects/collation/lib/libc/locale/euc.c ============================================================================== --- projects/collation/lib/libc/locale/euc.c Sun Nov 1 19:59:04 2015 (r290239) +++ projects/collation/lib/libc/locale/euc.c Sun Nov 1 21:02:30 2015 (r290240) @@ -317,8 +317,8 @@ _EUC_mbrtowc_impl(wchar_t * __restrict p { _EucState *es; int i, want; - wchar_t wc; - unsigned char ch; + wchar_t wc = 0; + unsigned char ch, chs; es = (_EucState *)ps; @@ -367,7 +367,8 @@ _EUC_mbrtowc_impl(wchar_t * __restrict p for (i = 0; i < MIN(want, n); i++) { wc <<= 8; - wc |= *s; + chs = *s; + wc |= chs; s++; } if (i < want) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201511012102.tA1L2Ubi026119>