diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2016-05-25 12:13:03 +0200 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2016-05-25 12:13:03 +0200 |
commit | 030d86d04dbd6ae878ff894256c5a465890d5970 (patch) | |
tree | 1eee89562f21b687e762b234b857c7a75101ba99 /winsup/cygwin | |
parent | 3b66731698a72e5912f867e4aa8c170332c510fb (diff) | |
download | cygnal-030d86d04dbd6ae878ff894256c5a465890d5970.tar.gz cygnal-030d86d04dbd6ae878ff894256c5a465890d5970.tar.bz2 cygnal-030d86d04dbd6ae878ff894256c5a465890d5970.zip |
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>
Diffstat (limited to 'winsup/cygwin')
-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 |