From 030d86d04dbd6ae878ff894256c5a465890d5970 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 25 May 2016 12:13:03 +0200 Subject: [PATCH] TZ: Replace unreliable isupper calls on wchars In case the TZ variable is empty, Cygwin fetches timezone info from Windows. Extracting the timezone short name uses isupper on wide chars. Replace with explicit check for A <= character <= Z to be independent of undefined behaviour. Signed-off-by: Corinna Vinschen --- winsup/cygwin/localtime.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/winsup/cygwin/localtime.cc b/winsup/cygwin/localtime.cc index d57a020b5..2d10508d1 100644 --- a/winsup/cygwin/localtime.cc +++ b/winsup/cygwin/localtime.cc @@ -1543,7 +1543,8 @@ tzsetwall (void) GetTimeZoneInformation(&tz); dst = cp = buf; for (src = tz.StandardName; *src; src++) - if (isupper(*src)) *dst++ = *src; + if (*src >= L'A' && *src <= L'Z') + *dst++ = *src; if ((dst - cp) < 3) { /* In non-english Windows, converted tz.StandardName @@ -1561,7 +1562,8 @@ tzsetwall (void) cp = strchr(cp, 0); dst = cp; for (src = tz.DaylightName; *src; src++) - if (isupper(*src)) *dst++ = *src; + if (*src >= L'A' && *src <= L'Z') + *dst++ = *src; if ((dst - cp) < 3) { /* In non-english Windows, converted tz.DaylightName