From 610e2b924020fe2d6a55e7ca6651f309b85c2d1d Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 24 Sep 2020 21:55:04 -0700 Subject: 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 --- oidset.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'oidset.c') diff --git a/oidset.c b/oidset.c index 15d4e18c37..2d0ab76fb5 100644 --- a/oidset.c +++ b/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); } -- cgit v1.2.3