verify_packfile: check pack validity before accessing data
The verify_packfile() does not explicitly open the packfile; instead, it starts with a sha1 checksum over the whole pack, and relies on use_pack() to open the packfile as a side effect. If the pack cannot be opened for whatever reason (either because its header information is corrupted, or perhaps because a simultaneous repack deleted it), then use_pack() will die(), as it has no way to return an error. This is not ideal, as verify_packfile() otherwise tries to gently return an error (this lets programs like git-fsck go on to check other packs). Instead, let's check is_pack_valid() up front, and return an error if it fails. This will open the pack as a side effect, and then use_pack() will later rely on our cached descriptor, and avoid calling die(). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									0b65a8dbdb
								
							
						
					
					
						commit
						a9445d859e
					
				|  | @ -57,11 +57,8 @@ static int verify_packfile(struct packed_git *p, | |||
| 	int err = 0; | ||||
| 	struct idx_entry *entries; | ||||
|  | ||||
| 	/* Note that the pack header checks are actually performed by | ||||
| 	 * use_pack when it first opens the pack file.  If anything | ||||
| 	 * goes wrong during those checks then the call will die out | ||||
| 	 * immediately. | ||||
| 	 */ | ||||
| 	if (!is_pack_valid(p)) | ||||
| 		return error("packfile %s cannot be accessed", p->pack_name); | ||||
|  | ||||
| 	git_SHA1_Init(&ctx); | ||||
| 	do { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Jeff King
						Jeff King