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

[PATCH v2 11/13] builtin/pack-objects: avoid using struct object_id for pack hash

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Apr 26, 2021, 01:02 UTC
Message-ID
<20210426010301.1093562-12-sandals@crustytoothpaste.net>
In-Reply-To
<20210426010301.1093562-1-sandals@crustytoothpaste.net>

We use struct object_id for the names of objects. It isn't intended to be used for other hash values that don't name objects such as the pack hash.

Because struct object_id will soon need to have its algorithm member set, using it in this code path would mean that we didn't set that member, only the hash member, which would result in a crash. For both of these reasons, switch to using an unsigned char array of size GIT_MAX_RAWSZ.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 builtin/pack-objects.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index a1e33d7507..2741deac55 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -1030,7 +1030,7 @@ static void write_pack_file(void)
 	write_order = compute_write_order();
 
 	do {
-		struct object_id oid;
+		unsigned char hash[GIT_MAX_RAWSZ];
 		char *pack_tmp_name = NULL;
 
 		if (pack_to_stdout)
@@ -1059,13 +1059,13 @@ static void write_pack_file(void)
 		 * If so, rewrite it like in fast-import
 		 */
 		if (pack_to_stdout) {
-			finalize_hashfile(f, oid.hash, CSUM_HASH_IN_STREAM | CSUM_CLOSE);
+			finalize_hashfile(f, hash, CSUM_HASH_IN_STREAM | CSUM_CLOSE);
 		} else if (nr_written == nr_remaining) {
-			finalize_hashfile(f, oid.hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
+			finalize_hashfile(f, hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
 		} else {
-			int fd = finalize_hashfile(f, oid.hash, 0);
-			fixup_pack_header_footer(fd, oid.hash, pack_tmp_name,
-						 nr_written, oid.hash, offset);
+			int fd = finalize_hashfile(f, hash, 0);
+			fixup_pack_header_footer(fd, hash, pack_tmp_name,
+						 nr_written, hash, offset);
 			close(fd);
 			if (write_bitmap_index) {
 				if (write_bitmap_index != WRITE_BITMAP_QUIET)
@@ -1100,17 +1100,17 @@ static void write_pack_file(void)
 			strbuf_addf(&tmpname, "%s-", base_name);
 
 			if (write_bitmap_index) {
-				bitmap_writer_set_checksum(oid.hash);
+				bitmap_writer_set_checksum(hash);
 				bitmap_writer_build_type_index(
 					&to_pack, written_list, nr_written);
 			}
 
 			finish_tmp_packfile(&tmpname, pack_tmp_name,
 					    written_list, nr_written,
-					    &pack_idx_opts, oid.hash);
+					    &pack_idx_opts, hash);
 
 			if (write_bitmap_index) {
-				strbuf_addf(&tmpname, "%s.bitmap", oid_to_hex(&oid));
+				strbuf_addf(&tmpname, "%s.bitmap", hash_to_hex(hash));
 
 				stop_progress(&progress_state);
 
@@ -1124,7 +1124,7 @@ static void write_pack_file(void)
 
 			strbuf_release(&tmpname);
 			free(pack_tmp_name);
-			puts(oid_to_hex(&oid));
+			puts(hash_to_hex(hash));
 		}
 
 		/* mark written objects as written to previous pack */
Previous: brian m. carlsonNext: brian m. carlson
Message 10 of 16 in “SHA-256 / SHA-1 interop, part 1”
  1. 00/13 SHA-256 / SHA-1 interop, part 1brian m. carlson, Apr 26, 2021
  2. 01/13 hash: add an algo member to struct object_idbrian m. carlson, Apr 26, 2021
  3. Matheus Tavares BernardinoMay 7, 2021
  4. brian m. carlsonMay 7, 2021
  5. 03/13 http-push: set algorithm when reading object IDbrian m. carlson, Apr 26, 2021
  6. 06/13 builtin/pack-redundant: avoid casting buffers to struct object_idbrian m. carlson, Apr 26, 2021
  7. 02/13 Always use oidread to read into struct object_idbrian m. carlson, Apr 26, 2021
  8. 07/13 hash: set, copy, and use algo field in struct object_idbrian m. carlson, Apr 26, 2021
  9. 10/13 commit-graph: don't store file hashes as struct object_idbrian m. carlson, Apr 26, 2021
  10. 11/13 builtin/pack-objects: avoid using struct object_id for pack hashbrian m. carlson, Apr 26, 2021
  11. 13/13 hex: print objects using the hash algorithm memberbrian m. carlson, Apr 26, 2021
  12. 04/13 hash: add a function to finalize object IDsbrian m. carlson, Apr 26, 2021
  13. 05/13 Use the final_oid_fn to finalize hashing of object IDsbrian m. carlson, Apr 26, 2021
  14. 08/13 hash: provide per-algorithm null OIDsbrian m. carlson, Apr 26, 2021
  15. 09/13 builtin/show-index: set the algorithm for object IDsbrian m. carlson, Apr 26, 2021
  16. 12/13 hex: default to the_hash_algo on zero algorithm valuebrian m. carlson, Apr 26, 2021

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.