diff options
Diffstat (limited to 'thirdparty/icu4c/common/putil.cpp')
-rw-r--r-- | thirdparty/icu4c/common/putil.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/thirdparty/icu4c/common/putil.cpp b/thirdparty/icu4c/common/putil.cpp index ffcbbcce59..68be079b3a 100644 --- a/thirdparty/icu4c/common/putil.cpp +++ b/thirdparty/icu4c/common/putil.cpp @@ -727,8 +727,10 @@ static char *gTimeZoneBufferPtr = NULL; #if !U_PLATFORM_USES_ONLY_WIN32_API #define isNonDigit(ch) (ch < '0' || '9' < ch) +#define isDigit(ch) ('0' <= ch && ch <= '9') static UBool isValidOlsonID(const char *id) { int32_t idx = 0; + int32_t idxMax = 0; /* Determine if this is something like Iceland (Olson ID) or AST4ADT (non-Olson ID) */ @@ -736,6 +738,13 @@ static UBool isValidOlsonID(const char *id) { idx++; } + /* Allow at maximum 2 numbers at the end of the id to support zone id's + like GMT+11. */ + idxMax = idx + 2; + while (id[idx] && isDigit(id[idx]) && idx < idxMax) { + idx++; + } + /* If we went through the whole string, then it might be okay. The timezone is sometimes set to "CST-7CDT", "CST6CDT5,J129,J131/19:30", "GRNLNDST3GRNLNDDT" or similar, so we cannot use it. @@ -918,7 +927,7 @@ static UBool compareBinaryFiles(const char* defaultTZFileName, const char* TZFil if (sizeFile != tzInfo->defaultTZFileSize) { result = FALSE; } else { - /* Store the data from the files in seperate buffers and + /* Store the data from the files in separate buffers and * compare each byte to determine equality. */ if (tzInfo->defaultTZBuffer == NULL) { |