1971
return 1;
1972
}
1973
1974
-static int validate_raw_date(const char *src, char *result, int maxlen)
1974
+static int validate_raw_date(const char *src, struct strbuf *result)
1975
{
1976
const char *orig_src = src;
1977
char *endp;
1989
return -1;
1990
1991
num = strtoul(src + 1, &endp, 10);
1992
- if (errno || endp == src + 1 || *endp || (endp - orig_src) >= maxlen ||
1993
- 1400 < num)
1992
+ if (errno || endp == src + 1 || *endp || 1400 < num)
1993
return -1;
1994
1996
- strcpy(result, orig_src);
1995
+ strbuf_addstr(result, orig_src);
1996
return 0;
1997
}
1998
2000
{
2001
const char *ltgt;
2002
size_t name_len;
2004
- char *ident;
2003
+ struct strbuf ident = STRBUF_INIT;
2004
2005
/* ensure there is a space delimiter even if there is no name */
2006
if (*buf == '<')
2019
die("Missing space after > in ident string: %s", buf);
2020
ltgt++;
2021
name_len = ltgt - buf;
2023
- ident = xmalloc(name_len + 24);
2024
- strncpy(ident, buf, name_len);
2022
+ strbuf_add(&ident, buf, name_len);
2023
2024
switch (whenspec) {
2025
case WHENSPEC_RAW:
2028
- if (validate_raw_date(ltgt, ident + name_len, 24) < 0)
2026
+ if (validate_raw_date(ltgt, &ident) < 0)
2027
die("Invalid raw date \"%s\" in ident: %s", ltgt, buf);
2028
break;
2029
case WHENSPEC_RFC2822:
2032
- if (parse_date(ltgt, ident + name_len, 24) < 0)
2030
+ if (parse_date(ltgt, &ident) < 0)
2031
die("Invalid rfc2822 date \"%s\" in ident: %s", ltgt, buf);
2032
break;
2033
case WHENSPEC_NOW:
2034
if (strcmp("now", ltgt))
2035
die("Date in ident must be 'now': %s", buf);
2038
- datestamp(ident + name_len, 24);
2036
+ datestamp(&ident);
2037
break;
2038
}
2039
2042
- return ident;
2040
+ return strbuf_detach(&ident, NULL);
2041
}
2042
2043
static void parse_and_store_blob(