summaryrefslogtreecommitdiff
path: root/thirdparty/icu4c/common/putil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/icu4c/common/putil.cpp')
-rw-r--r--thirdparty/icu4c/common/putil.cpp11
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) {