[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
UTF-8 Encode problems with \u \U
From: |
John Kearney |
Subject: |
UTF-8 Encode problems with \u \U |
Date: |
Sat, 18 Feb 2012 10:51:48 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:10.0) Gecko/20120129 Thunderbird/10.0 |
Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64'
-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu'
-DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash'
-DSHELL -DHAVE_CONFIG_H -I. -I../bash -I../bash/include
-I../bash/lib -g -O2 -Wall
uname output: Linux DETH00 3.0.0-15-generic #26-Ubuntu SMP Fri Jan 20
17:23:00 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Machine Type: x86_64-pc-linux-gnu
Bash Version: 4.2
Patch Level: 10
Release Status: release
Description:
\u and \U incorrectly encode values between \u80 and \uff
Repeat-By:
printf '%q\n' "$(printf '\uff')"
printf '%q\n' $'\uff'
# outputs $'\377' instead of $'\303\277'
Fix:
iff --git a/builtins/printf.def b/builtins/printf.def
index 9eca215..b155160 100644
--- a/builtins/printf.def
+++ b/builtins/printf.def
@@ -859,7 +859,7 @@ tescape (estart, cp, lenp, sawc)
*cp = '\\';
return 0;
}
- if (uvalue <= UCHAR_MAX)
+ if (uvalue <= CHAR_MAX)
*cp = uvalue;
else
{
diff --git a/lib/sh/strtrans.c b/lib/sh/strtrans.c
index 2265782..2e6e37b 100644
--- a/lib/sh/strtrans.c
+++ b/lib/sh/strtrans.c
@@ -144,7 +144,7 @@ ansicstr (string, len, flags, sawc, rlen)
*r++ = '\\'; /* c remains unchanged */
break;
}
- else if (v <= UCHAR_MAX)
+ else if (v <= CHAR_MAX)
{
c = v;
break;
- UTF-8 Encode problems with \u \U,
John Kearney <=
Re: UTF-8 Encode problems with \u \U, Chet Ramey, 2012/02/19