"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Omar Polo <op@omarpolo.com>
Subject:
got_object_id-ify painted commits
To:
gameoftrees@openbsd.org
Date:
Tue, 09 Jul 2024 23:23:14 +0200

Download raw body.

Thread
in the same vein as in previous diffs this changes the
got_imsg_painted_commit to use a got_object_id instead of a uint8_t
buffer.

Just to recap, my plan is to change very soon(tm) the struct
got_object_id to this:

	#define GOT_OBJECT_ID_MAXLEN SHA256_DIGEST_LENGTH
	struct got_object_id {
		u_int_8 hash[GOT_OBJECT_ID_MAXLEN];
		enum got_hash_algorithm algo;
	};

where the `hash' field could only be partially used in the case of a
sha1 digest.  Moving whole structs is easier than having to set up the
algo field and ensure the hash is of the correct size everywhere.  On
the other hand, a compromised libexec helper could send us garbage.
nothing but lib/hash.c should touch it however.  I felt I had to point
out this.

diff /home/op/w/got
commit - 1b1a386df9068b7cb3ceb8a67d88ccd24f5b2deb
path + /home/op/w/got
blob - 96ea6e4692bb24d2f128702524fea15db694ddb5
file + lib/got_lib_privsep.h
--- lib/got_lib_privsep.h
+++ lib/got_lib_privsep.h
@@ -354,7 +354,7 @@ struct got_imsg_commit_painting_request {
 
 /* Structure for GOT_IMSG_PAINTED_COMMITS. */
 struct got_imsg_painted_commit {
-	uint8_t id[SHA1_DIGEST_LENGTH];
+	struct got_object_id id;
 	intptr_t color;
 } __attribute__((__packed__));
 
blob - 0ca99e2d0f60973cd9f9304f89eb72f756cc520b
file + lib/privsep.c
--- lib/privsep.c
+++ lib/privsep.c
@@ -3427,7 +3427,7 @@ send_painted_commits(struct got_object_id_queue *ids, 
 		color = (intptr_t)qid->data;
 
 		/* Keep in sync with struct got_imsg_painted_commit! */
-		if (imsg_add(wbuf, qid->id.sha1, SHA1_DIGEST_LENGTH) == -1)
+		if (imsg_add(wbuf, &qid->id, sizeof(qid->id)) == -1)
 			return got_error_from_errno("imsg_add PAINTED_COMMITS");
 		if (imsg_add(wbuf, &color, sizeof(color)) == -1)
 			return got_error_from_errno("imsg_add PAINTED_COMMITS");
@@ -3521,7 +3521,7 @@ got_privsep_recv_painted_commits(struct got_object_id_
 
 			if (icommits.present_in_pack) {
 				struct got_object_id id;
-				memcpy(id.sha1, icommit.id, SHA1_DIGEST_LENGTH);
+				memcpy(&id, &icommit.id, sizeof(id));
 				err = cb(cb_arg, &id, icommit.color);
 				if (err)
 					break;
@@ -3530,8 +3530,8 @@ got_privsep_recv_painted_commits(struct got_object_id_
 				err = got_object_qid_alloc_partial(&qid);
 				if (err)
 					break;
-				memcpy(qid->id.sha1, icommit.id,
-				    SHA1_DIGEST_LENGTH);
+				memcpy(&qid->id, &icommit.id,
+				    sizeof(qid->id));
 				qid->data = (void *)icommit.color;
 				STAILQ_INSERT_TAIL(new_ids, qid, entry);
 			}