diff options
author | Junio C Hamano <gitster@pobox.com> | 2020-09-25 06:55:04 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-09-25 07:20:58 +0200 |
commit | 610e2b924020fe2d6a55e7ca6651f309b85c2d1d (patch) | |
tree | 4dda607bf854f2b293862eca090389a55812857e /oidset.c | |
parent | t8013: minimum preparatory clean-up (diff) | |
download | git-610e2b924020fe2d6a55e7ca6651f309b85c2d1d.tar.xz git-610e2b924020fe2d6a55e7ca6651f309b85c2d1d.zip |
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>
Diffstat (limited to 'oidset.c')
-rw-r--r-- | oidset.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -43,6 +43,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; struct object_id oid; @@ -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); } |