"GOT", but the "O" is a cute, smiling sun Index | Thread

From:
Omar Polo <op@omarpolo.com>
Subject:
some size_t/off_t fixes for got-index-pack
To:
gameoftrees@openbsd.org
Date:
Tue, 18 Oct 2022 10:38:36 +0200

Download raw body.

this fixes some size_t/off_t usage in got-index-pack.  I've spotted
these while looking into off_t/size_t usage in inflate.c, after a
stsp' comment on irc.

this is only a step though: there's still an implicit off_t -> size_t
conversion when calling the inflate.c functions, so this change is
almost a no-op effectively, but since the inflate.c diff would vely
likely be bigger i thought of starting with committing this.

ok?

diff aabb25f81b1f8f68a03af422f9ae14ea5c3ae1fd 535672d658a448620f24cd3a0bf61e9a6a98c94c
commit - aabb25f81b1f8f68a03af422f9ae14ea5c3ae1fd
commit + 535672d658a448620f24cd3a0bf61e9a6a98c94c
blob - be8dabb4b70569ee825b8a9571f0915a88776478
blob + 9ccb27ec5b1aa961b76fabb64c5f2e6094f9e14b
--- lib/pack.c
+++ lib/pack.c
@@ -842,7 +842,7 @@ got_pack_parse_object_type_and_size(uint8_t *type, uin
 	uint8_t t = 0;
 	uint64_t s = 0;
 	uint8_t sizeN;
-	size_t mapoff = 0;
+	off_t mapoff = 0;
 	int i = 0;
 
 	*len = 0;
@@ -851,7 +851,7 @@ got_pack_parse_object_type_and_size(uint8_t *type, uin
 		return got_error(GOT_ERR_PACK_OFFSET);
 
 	if (pack->map) {
-		mapoff = (size_t)offset;
+		mapoff = offset;
 	} else {
 		if (lseek(pack->fd, offset, SEEK_SET) == -1)
 			return got_error_from_errno("lseek");
@@ -928,8 +928,8 @@ parse_negative_offset(int64_t *offset, size_t *len, st
 			return got_error(GOT_ERR_NO_SPACE);
 
 		if (pack->map) {
-			size_t mapoff;
-			mapoff = (size_t)delta_offset + *len;
+			off_t mapoff;
+			mapoff = delta_offset + *len;
 			if (mapoff + sizeof(offN) >= pack->filesize)
 				return got_error(GOT_ERR_PACK_OFFSET);
 			offN = *(pack->map + mapoff);
@@ -1080,7 +1080,7 @@ got_pack_parse_ref_delta(struct got_object_id *id,
     struct got_pack *pack, off_t delta_offset, int tslen)
 {
 	if (pack->map) {
-		size_t mapoff = delta_offset + tslen;
+		off_t mapoff = delta_offset + tslen;
 		if (mapoff + sizeof(*id) >= pack->filesize)
 			return got_error(GOT_ERR_PACK_OFFSET);
 		memcpy(id, pack->map + mapoff, sizeof(*id));
@@ -1392,7 +1392,7 @@ got_pack_dump_delta_chain_to_file(size_t *result_size,
 				max_size = delta->size;
 			if (max_size > max_bufsize) {
 				if (pack->map) {
-					mapoff = (size_t)delta_data_offset;
+					mapoff = delta_data_offset;
 					err = got_inflate_to_file_mmap(
 					    &base_bufsz, NULL, NULL, pack->map,
 					    mapoff, pack->filesize - mapoff,
@@ -1409,7 +1409,7 @@ got_pack_dump_delta_chain_to_file(size_t *result_size,
 				}
 				accum_bufsz = max_size;
 				if (pack->map) {
-					mapoff = (size_t)delta_data_offset;
+					mapoff = delta_data_offset;
 					err = got_inflate_to_mem_mmap(&base_buf,
 					    &base_bufsz, NULL, NULL,
 					    pack->map, mapoff,
@@ -1586,7 +1586,7 @@ got_pack_dump_delta_chain_to_mem(uint8_t **outbuf, siz
 				max_size = delta->size;
 
 			if (pack->map) {
-				size_t mapoff = (size_t)delta_data_offset;
+				off_t mapoff = delta_data_offset;
 				err = got_inflate_to_mem_mmap(&base_buf,
 				    &base_bufsz, NULL, NULL, pack->map,
 				    mapoff, pack->filesize - mapoff);
@@ -1704,7 +1704,7 @@ got_packfile_extract_object(struct got_pack *pack, str
 			return got_error(GOT_ERR_PACK_OFFSET);
 
 		if (pack->map) {
-			size_t mapoff = (size_t)obj->pack_offset;
+			off_t mapoff = obj->pack_offset;
 			err = got_inflate_to_file_mmap(&obj->size, NULL, NULL,
 			    pack->map, mapoff, pack->filesize - mapoff,
 			    outfile);
@@ -1734,7 +1734,7 @@ got_packfile_extract_object_to_mem(uint8_t **buf, size
 		if (obj->pack_offset >= pack->filesize)
 			return got_error(GOT_ERR_PACK_OFFSET);
 		if (pack->map) {
-			size_t mapoff = (size_t)obj->pack_offset;
+			off_t mapoff = obj->pack_offset;
 			err = got_inflate_to_mem_mmap(buf, len, NULL, NULL,
 			    pack->map, mapoff, pack->filesize - mapoff);
 		} else {
blob - a361289b4a09acce2ecd03e2d8817a2f84e28f5a
blob + 06f67a9876ec2cdda565b0e36e3cf14c8d503ed4
--- libexec/got-index-pack/got-index-pack.c
+++ libexec/got-index-pack/got-index-pack.c
@@ -184,7 +184,7 @@ read_packed_object(struct got_pack *pack, struct got_i
 	char *header;
 	size_t headerlen;
 	const char *obj_label;
-	size_t mapoff = obj->off;
+	off_t mapoff = obj->off;
 	struct got_inflate_checksum csum;
 
 	memset(&csum, 0, sizeof(csum));
@@ -645,7 +645,7 @@ index_pack(struct got_pack *pack, int idxfd, FILE *tmp
 	uint8_t packidx_hash[SHA1_DIGEST_LENGTH];
 	ssize_t r, w;
 	int pass, have_ref_deltas = 0, first_delta_idx = -1;
-	size_t mapoff = 0;
+	off_t mapoff = 0;
 	int p_indexed = 0, last_p_indexed = -1;
 	int p_resolved = 0, last_p_resolved = -1;
 	struct got_ratelimit rl;