Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 12 Jun 2011 12:54:52 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r223010 - head/bin/sh
Message-ID:  <201106121254.p5CCsqbW025631@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Sun Jun 12 12:54:52 2011
New Revision: 223010
URL: http://svn.freebsd.org/changeset/base/223010

Log:
  sh: Fix locale-dependent ranges in bracket expressions.
  
  When I added UTF-8 support in r221646, the LC_COLLATE-based ordering broke
  because of sign extension of char.
  
  Because of libc restrictions, this does not work for UTF-8. For UTF-8
  locales, ranges always use character code order.

Modified:
  head/bin/sh/expand.c

Modified: head/bin/sh/expand.c
==============================================================================
--- head/bin/sh/expand.c	Sun Jun 12 12:51:58 2011	(r223009)
+++ head/bin/sh/expand.c	Sun Jun 12 12:54:52 2011	(r223010)
@@ -1430,7 +1430,7 @@ patmatch(const char *pattern, const char
 			if (localeisutf8)
 				wc = get_wc(&q);
 			else
-				wc = *q++;
+				wc = (unsigned char)*q++;
 			if (wc == '\0')
 				return 0;
 			break;
@@ -1487,7 +1487,7 @@ patmatch(const char *pattern, const char
 			if (localeisutf8)
 				chr = get_wc(&q);
 			else
-				chr = *q++;
+				chr = (unsigned char)*q++;
 			if (chr == '\0')
 				return 0;
 			c = *p++;
@@ -1502,7 +1502,7 @@ patmatch(const char *pattern, const char
 					if (wc == 0) /* bad utf-8 */
 						return 0;
 				} else
-					wc = c;
+					wc = (unsigned char)c;
 				if (*p == '-' && p[1] != ']') {
 					p++;
 					while (*p == CTLQUOTEMARK)
@@ -1514,7 +1514,7 @@ patmatch(const char *pattern, const char
 						if (wc2 == 0) /* bad utf-8 */
 							return 0;
 					} else
-						wc2 = *p++;
+						wc2 = (unsigned char)*p++;
 					if (   collate_range_cmp(chr, wc) >= 0
 					    && collate_range_cmp(chr, wc2) <= 0
 					   )



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106121254.p5CCsqbW025631>