blame: validate and peel the object names on the ignore list
The command reads list of object names to place on the ignore list either from the command line or from a file, but they are not checked with their object type (those read from the file are not even checked for object existence). Extend the oidset_parse_file() API and allow it to take a callback that can be used to die (e.g. when an inappropriate input is read) or modify the object name read (e.g. when a tag pointing at a commit is read, and the caller wants a commit object name), and use it in the code that handles ignore list. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
9
oidset.c
9
oidset.c
@ -42,6 +42,12 @@ int oidset_size(struct oidset *set)
|
||||
}
|
||||
|
||||
void oidset_parse_file(struct oidset *set, const char *path)
|
||||
{
|
||||
oidset_parse_file_carefully(set, path, NULL, NULL);
|
||||
}
|
||||
|
||||
void oidset_parse_file_carefully(struct oidset *set, const char *path,
|
||||
oidset_parse_tweak_fn fn, void *cbdata)
|
||||
{
|
||||
FILE *fp;
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
@ -66,7 +72,8 @@ void oidset_parse_file(struct oidset *set, const char *path)
|
||||
if (!sb.len)
|
||||
continue;
|
||||
|
||||
if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0')
|
||||
if (parse_oid_hex(sb.buf, &oid, &p) || *p != '\0' ||
|
||||
(fn && fn(&oid, cbdata)))
|
||||
die("invalid object name: %s", sb.buf);
|
||||
oidset_insert(set, &oid);
|
||||
}
|
||||
|
Reference in New Issue
Block a user