From: Omar Polo Subject: got_object_id-ify painted commits To: gameoftrees@openbsd.org Date: Tue, 09 Jul 2024 23:23:14 +0200 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); }