diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2016-05-25 13:13:03 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2016-05-25 13:13:03 +0300 |
commit | 030d86d04dbd6ae878ff894256c5a465890d5970 (patch) | |
tree | 1eee89562f21b687e762b234b857c7a75101ba99 | |
parent | 3b66731698a72e5912f867e4aa8c170332c510fb (diff) |
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 <corinna@vinschen.de>
-rw-r--r-- | winsup/cygwin/localtime.cc | 6 |
1 files 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 |