git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 14/14] verify-commit: simplify parameters to run_gpg_verify()

From
Jeff King <peff@peff.net>
Date
May 9, 2019, 21:32 UTC
Message-ID
<20190509213229.GN15837@sigill.intra.peff.net>
In-Reply-To
<20190509212558.GA15438@sigill.intra.peff.net>

The buf/len parameters of run_gpg_verify() have never been used since the function was added in d07b00b7f3 (verify-commit: scriptable commit signature verification, 2014-06-23). Instead, check_commit_signature() accesses the commit struct directly.

Worse, we read the whole object just to check its type and do not attach it to the "struct commit". Meaning we end up loading the object from disk twice for no good reason.

And to further confuse matters, our type check is comes from what we read from disk, but we later assume that lookup_commit() will return non-NULL. This might not be true if some other object previously referenced the same oid as a non-commit (though this may be impossible to trigger in practice since we don't generally parse any other objects in this command).

Instead, let's do our type check by loading the object via parse_object(). That will attach the buffer to the struct so it can be used later by check_commit_signature(). And it ensures that lookup_commit() will return something sane.

And then we can just drop the unused "buf" and "len" parameters entirely.

Signed-off-by: Jeff King <peff@peff.net>
---
 builtin/verify-commit.c | 23 ++++++++---------------
 1 file changed, 8 insertions(+), 15 deletions(-)
diff --git a/builtin/verify-commit.c b/builtin/verify-commit.c
index 7772c07ed7..4b9e823f8f 100644
--- a/builtin/verify-commit.c
+++ b/builtin/verify-commit.c
@@ -21,15 +21,14 @@ static const char * const verify_commit_usage[] = {
 		NULL
 };
 
-static int run_gpg_verify(const struct object_id *oid, const char *buf, unsigned long size, unsigned flags)
+static int run_gpg_verify(struct commit *commit, unsigned flags)
 {
 	struct signature_check signature_check;
 	int ret;
 
 	memset(&signature_check, 0, sizeof(signature_check));
 
-	ret = check_commit_signature(lookup_commit(the_repository, oid),
-				     &signature_check);
+	ret = check_commit_signature(commit, &signature_check);
 	print_signature_buffer(&signature_check, flags);
 
 	signature_check_clear(&signature_check);
@@ -38,26 +37,20 @@ static int run_gpg_verify(const struct object_id *oid, const char *buf, unsigned
 
 static int verify_commit(const char *name, unsigned flags)
 {
-	enum object_type type;
 	struct object_id oid;
-	char *buf;
-	unsigned long size;
-	int ret;
+	struct object *obj;
 
 	if (get_oid(name, &oid))
 		return error("commit '%s' not found.", name);
 
-	buf = read_object_file(&oid, &type, &size);
-	if (!buf)
+	obj = parse_object(the_repository, &oid);
+	if (!obj)
 		return error("%s: unable to read file.", name);
-	if (type != OBJ_COMMIT)
+	if (obj->type != OBJ_COMMIT)
 		return error("%s: cannot verify a non-commit object of type %s.",
-				name, type_name(type));
-
-	ret = run_gpg_verify(&oid, buf, size, flags);
+				name, type_name(obj->type));
 
-	free(buf);
-	return ret;
+	return run_gpg_verify((struct commit *)obj, flags);
 }
 
 static int git_verify_commit_config(const char *var, const char *value, void *cb)
-- 
2.21.0.1382.g4c6032d436
Previous: Jeff KingNext: Derrick Stolee
Message 18 of 20 in “"final" batch of unused parameter cleanups”
  1. 0/14 "final" batch of unused parameter cleanupsJeff King, May 9, 2019
  2. 01/14 cmd_{read,write}_tree: rename "unused" variable that is usedJeff King, May 9, 2019
  3. Derrick StoleeMay 10, 2019
  4. Junio C HamanoMay 13, 2019
  5. 02/14 submodule: drop unused prefix parameter from some functionsJeff King, May 9, 2019
  6. 03/14 builtin: consistently pass cmd_* prefix to parse_optionsJeff King, May 9, 2019
  7. Derrick StoleeMay 10, 2019
  8. 04/14 clone: drop dest parameter from copy_alternates()Jeff King, May 9, 2019
  9. 05/14 read-cache: drop unused parameter from threaded loadJeff King, May 9, 2019
  10. 06/14 wt-status: drop unused status parameterJeff King, May 9, 2019
  11. 07/14 mktree: drop unused length parameterJeff King, May 9, 2019
  12. 08/14 name-rev: drop unused parameters from is_better_name()Jeff King, May 9, 2019
  13. 09/14 pack-objects: drop unused rev_info parametersJeff King, May 9, 2019
  14. 10/14 receive-pack: drop unused "commands" from prepare_shallow_update()Jeff King, May 9, 2019
  15. 11/14 remove_all_fetch_refspecs(): drop unused "remote" parameterJeff King, May 9, 2019
  16. 12/14 rev-list: drop unused void pointer from finish_commit()Jeff King, May 9, 2019
  17. 13/14 show-branch: drop unused parameter from show_independent()Jeff King, May 9, 2019
  18. 14/14 verify-commit: simplify parameters to run_gpg_verify()Jeff King, May 9, 2019
  19. Derrick StoleeMay 10, 2019
  20. Derrick StoleeMay 10, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.