avoid out-of-bounds read for invalid quoted timezone
authorSamuel Holland <samuel@sholland.org>
Sat, 22 Feb 2020 22:01:12 +0000 (16:01 -0600)
committerRich Felker <dalias@aerifal.cx>
Sat, 21 Mar 2020 16:24:40 +0000 (12:24 -0400)
Parsing the timezone name must stop when reaching the null terminator.
In that case, there is no '>' to skip.

src/time/__tz.c

index 185642e8828bd00a24b622043f1e5117cb5eb94d..a962960e9baa30b1c7924dc0a8cc0eb2454dfb66 100644 (file)
@@ -86,9 +86,9 @@ static void getname(char *d, const char **p)
        int i;
        if (**p == '<') {
                ++*p;
-               for (i=0; (*p)[i]!='>' && i<TZNAME_MAX; i++)
+               for (i=0; (*p)[i] && (*p)[i]!='>' && i<TZNAME_MAX; i++)
                        d[i] = (*p)[i];
-               ++*p;
+               if ((*p)[i]) ++*p;
        } else {
                for (i=0; ((*p)[i]|32)-'a'<26U && i<TZNAME_MAX; i++)
                        d[i] = (*p)[i];