Properly check for printable characters in ansic_shouldqoute(). Use wchar_t* and iswprint() instead of isprint() and char*.
Signed-off-by: Roman Rakus <rra...@redhat.com> --- bash-4.2/lib/sh/strtrans.c | 26 +++++++++++++++++++++++++- 1 files changed, 25 insertions(+), 1 deletions(-) diff --git a/bash-4.2/lib/sh/strtrans.c b/bash-4.2/lib/sh/strtrans.c index 2265782..57f9af0 100644 --- a/bash-4.2/lib/sh/strtrans.c +++ b/bash-4.2/lib/sh/strtrans.c @@ -277,10 +277,34 @@ ansic_shouldquote (string) if (string == 0) return 0; +#if defined (HANDLE_MULTIBYTE) + const wchar_t *wcs; + wchar_t wcc; + + wchar_t *wcstr = NULL; + size_t wclen, slen; + + + slen = mbstowcs (wcstr, string, 0); + + if (slen == -1) + slen = 0; + wcstr = (wchar_t *)xmalloc (sizeof (wchar_t) * (slen + 1)); + mbstowcs (wcstr, string, slen + 1); + + + for (wcs = wcstr; wcc = *wcs; wcs++) + if (iswprint(wcc) == 0) + { + free (wcstr); + return 1; + } + free (wcstr); +#else for (s = string; c = *s; s++) if (ISPRINT (c) == 0) return 1; - +#endif return 0; } -- 1.7.6