From owner-svn-src-projects@freebsd.org Sun Nov 1 21:02:31 2015 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DC1AAA24235 for ; Sun, 1 Nov 2015 21:02:31 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A81901339; Sun, 1 Nov 2015 21:02:31 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id tA1L2UUS026120; Sun, 1 Nov 2015 21:02:30 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id tA1L2Ubi026119; Sun, 1 Nov 2015 21:02:30 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201511012102.tA1L2Ubi026119@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sun, 1 Nov 2015 21:02:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r290240 - projects/collation/lib/libc/locale X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 01 Nov 2015 21:02:32 -0000 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) {