diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-08-28 21:18:47 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-08-28 21:18:47 -0700 |
commit | 0b98954975502f56f1de2a4cb0569f7e80fd44d0 (patch) | |
tree | 25e591cd0b0743533cf14a3b7a9b5d2620e39671 /fast-import.c | |
parent | d39753c23824f0c384a7932f3772f0ddc25010f7 (diff) | |
parent | 53f53cff24c5fe6683234bcd5386a447b8b17074 (diff) | |
download | git-0b98954975502f56f1de2a4cb0569f7e80fd44d0.tar.gz git-0b98954975502f56f1de2a4cb0569f7e80fd44d0.tar.xz |
Merge branch 'di/fast-import-ident'
* di/fast-import-ident:
fsck: improve committer/author check
fsck: add a few committer name tests
fast-import: check committer name more strictly
fast-import: don't fail on omitted committer name
fast-import: add input format tests
Diffstat (limited to 'fast-import.c')
-rw-r--r-- | fast-import.c | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/fast-import.c b/fast-import.c index 7cc22625e..6d491b92f 100644 --- a/fast-import.c +++ b/fast-import.c @@ -1969,32 +1969,41 @@ static int validate_raw_date(const char *src, char *result, int maxlen) static char *parse_ident(const char *buf) { - const char *gt; + const char *ltgt; size_t name_len; char *ident; - gt = strrchr(buf, '>'); - if (!gt) + /* ensure there is a space delimiter even if there is no name */ + if (*buf == '<') + --buf; + + ltgt = buf + strcspn(buf, "<>"); + if (*ltgt != '<') + die("Missing < in ident string: %s", buf); + if (ltgt != buf && ltgt[-1] != ' ') + die("Missing space before < in ident string: %s", buf); + ltgt = ltgt + 1 + strcspn(ltgt + 1, "<>"); + if (*ltgt != '>') die("Missing > in ident string: %s", buf); - gt++; - if (*gt != ' ') + ltgt++; + if (*ltgt != ' ') die("Missing space after > in ident string: %s", buf); - gt++; - name_len = gt - buf; + ltgt++; + name_len = ltgt - buf; ident = xmalloc(name_len + 24); strncpy(ident, buf, name_len); switch (whenspec) { case WHENSPEC_RAW: - if (validate_raw_date(gt, ident + name_len, 24) < 0) - die("Invalid raw date \"%s\" in ident: %s", gt, buf); + if (validate_raw_date(ltgt, ident + name_len, 24) < 0) + die("Invalid raw date \"%s\" in ident: %s", ltgt, buf); break; case WHENSPEC_RFC2822: - if (parse_date(gt, ident + name_len, 24) < 0) - die("Invalid rfc2822 date \"%s\" in ident: %s", gt, buf); + if (parse_date(ltgt, ident + name_len, 24) < 0) + die("Invalid rfc2822 date \"%s\" in ident: %s", ltgt, buf); break; case WHENSPEC_NOW: - if (strcmp("now", gt)) + if (strcmp("now", ltgt)) die("Date in ident must be 'now': %s", buf); datestamp(ident + name_len, 24); break; |