summaryrefslogtreecommitdiffstats
path: root/bin/sh
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2011-06-12 12:54:52 +0000
committerjilles <jilles@FreeBSD.org>2011-06-12 12:54:52 +0000
commit59713c6c292854ae502742b70be718211386be77 (patch)
tree6c049c7d16d4193f9e4244a8b67b76cde12e52db /bin/sh
parent3b40cce52cb6ec43ef5f0687700d4450cabac8df (diff)
downloadFreeBSD-src-59713c6c292854ae502742b70be718211386be77.zip
FreeBSD-src-59713c6c292854ae502742b70be718211386be77.tar.gz
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.
Diffstat (limited to 'bin/sh')
-rw-r--r--bin/sh/expand.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/bin/sh/expand.c b/bin/sh/expand.c
index aaa91ac..beb655d 100644
--- a/bin/sh/expand.c
+++ b/bin/sh/expand.c
@@ -1430,7 +1430,7 @@ patmatch(const char *pattern, const char *string, int squoted)
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 *string, int squoted)
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 *string, int squoted)
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 *string, int squoted)
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
)
OpenPOWER on IntegriCloud