From 528f112b049b22c72f1d16f22754585254d6115b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 26 Mar 2016 15:58:44 -0400 Subject: [PATCH] Modernize zic's test for valid timezone abbreviations. We really need to sync all of our IANA-derived timezone code with upstream, but that's going to be a large patch and I certainly don't care to shove such a thing into stable branches immediately before a release. As a stopgap, copy just the tzcode2016c logic that checks validity of timezone abbreviations. This prevents getting multiple "time zone abbreviation differs from POSIX standard" bleats with tzdata 2014b and later. --- src/timezone/zic.c | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/src/timezone/zic.c b/src/timezone/zic.c index 8a95d6ac3f..9fdc263603 100644 --- a/src/timezone/zic.c +++ b/src/timezone/zic.c @@ -2771,30 +2771,15 @@ newabbr(const char *string) const char *cp; char *wp; - /* - * Want one to ZIC_MAX_ABBR_LEN_WO_WARN alphabetics optionally - * followed by a + or - and a number from 1 to 14. - */ cp = string; wp = NULL; - while (isascii((unsigned char) *cp) && - isalpha((unsigned char) *cp)) + while (isalpha((unsigned char) *cp) || ('0' <= *cp && *cp <= '9') + || *cp == '-' || *cp == '+') ++cp; - if (cp - string == 0) - wp = _("time zone abbreviation lacks alphabetic at start"); - if (noise && cp - string > 3) - wp = _("time zone abbreviation has more than 3 alphabetics"); + if (noise && cp - string < 3) + wp = _("time zone abbreviation has fewer than 3 characters"); if (cp - string > ZIC_MAX_ABBR_LEN_WO_WARN) - wp = _("time zone abbreviation has too many alphabetics"); - if (wp == NULL && (*cp == '+' || *cp == '-')) - { - ++cp; - if (isascii((unsigned char) *cp) && - isdigit((unsigned char) *cp)) - if (*cp++ == '1' && - *cp >= '0' && *cp <= '4') - ++cp; - } + wp = _("time zone abbreviation has too many characters"); if (*cp != '\0') wp = _("time zone abbreviation differs from POSIX standard"); if (wp != NULL) -- 2.40.0