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;