From: Junio C Hamano Date: Fri, 7 Apr 2006 23:51:55 +0000 (-0700) Subject: Merge branch 'maint' X-Git-Tag: v1.3.0-rc3~8 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/ce18135d862b5dbc731d203b27c279529e58b54b?ds=inline;hp=-c Merge branch 'maint' * maint: count-delta: match get_delta_hdr_size() changes. check patch_delta bounds more carefully --- ce18135d862b5dbc731d203b27c279529e58b54b diff --combined sha1_file.c index ba8c4f7601,d8ef565561..e3d011309a --- a/sha1_file.c +++ b/sha1_file.c @@@ -9,10 -9,6 +9,10 @@@ #include "cache.h" #include "delta.h" #include "pack.h" +#include "blob.h" +#include "commit.h" +#include "tag.h" +#include "tree.h" #ifndef O_NOATIME #if defined(__linux__) && (defined(__i386__) || defined(__PPC__)) @@@ -808,10 -804,12 +808,12 @@@ static int packed_delta_info(unsigned c * the result size. */ data = delta_head; - get_delta_hdr_size(&data); /* ignore base size */ + + /* ignore base size */ + get_delta_hdr_size(&data, delta_head+sizeof(delta_head)); /* Read the result size */ - result_size = get_delta_hdr_size(&data); + result_size = get_delta_hdr_size(&data, delta_head+sizeof(delta_head)); *sizep = result_size; } return 0; @@@ -868,7 -866,7 +870,7 @@@ void packed_object_info_detail(struct p char *type, unsigned long *size, unsigned long *store_size, - int *delta_chain_length, + unsigned int *delta_chain_length, unsigned char *base_sha1) { struct packed_git *p = e->p; @@@ -882,7 -880,7 +884,7 @@@ if (kind != OBJ_DELTA) *delta_chain_length = 0; else { - int chain_length = 0; + unsigned int chain_length = 0; memcpy(base_sha1, pack, 20); do { struct pack_entry base_ent; @@@ -898,16 -896,16 +900,16 @@@ } switch (kind) { case OBJ_COMMIT: - strcpy(type, "commit"); + strcpy(type, commit_type); break; case OBJ_TREE: - strcpy(type, "tree"); + strcpy(type, tree_type); break; case OBJ_BLOB: - strcpy(type, "blob"); + strcpy(type, blob_type); break; case OBJ_TAG: - strcpy(type, "tag"); + strcpy(type, tag_type); break; default: die("corrupted pack file %s containing object of kind %d", @@@ -938,16 -936,16 +940,16 @@@ static int packed_object_info(struct pa unuse_packed_git(p); return retval; case OBJ_COMMIT: - strcpy(type, "commit"); + strcpy(type, commit_type); break; case OBJ_TREE: - strcpy(type, "tree"); + strcpy(type, tree_type); break; case OBJ_BLOB: - strcpy(type, "blob"); + strcpy(type, blob_type); break; case OBJ_TAG: - strcpy(type, "tag"); + strcpy(type, tag_type); break; default: die("corrupted pack file %s containing object of kind %d", @@@ -977,16 -975,6 +979,16 @@@ static void *unpack_delta_entry(unsigne if (left < 20) die("truncated pack file"); + + /* The base entry _must_ be in the same pack */ + if (!find_pack_entry_one(base_sha1, &base_ent, p)) + die("failed to find delta-pack base object %s", + sha1_to_hex(base_sha1)); + base = unpack_entry_gently(&base_ent, type, &base_size); + if (!base) + die("failed to read delta-pack base object %s", + sha1_to_hex(base_sha1)); + data = base_sha1 + 20; data_size = left - 20; delta_data = xmalloc(delta_size); @@@ -1004,6 -992,14 +1006,6 @@@ if ((st != Z_STREAM_END) || stream.total_out != delta_size) die("delta data unpack failed"); - /* The base entry _must_ be in the same pack */ - if (!find_pack_entry_one(base_sha1, &base_ent, p)) - die("failed to find delta-pack base object %s", - sha1_to_hex(base_sha1)); - base = unpack_entry_gently(&base_ent, type, &base_size); - if (!base) - die("failed to read delta-pack base object %s", - sha1_to_hex(base_sha1)); result = patch_delta(base, base_size, delta_data, delta_size, &result_size); @@@ -1075,16 -1071,16 +1077,16 @@@ void *unpack_entry_gently(struct pack_e retval = unpack_delta_entry(pack, size, left, type, sizep, p); return retval; case OBJ_COMMIT: - strcpy(type, "commit"); + strcpy(type, commit_type); break; case OBJ_TREE: - strcpy(type, "tree"); + strcpy(type, tree_type); break; case OBJ_BLOB: - strcpy(type, "blob"); + strcpy(type, blob_type); break; case OBJ_TAG: - strcpy(type, "tag"); + strcpy(type, tag_type); break; default: return NULL; @@@ -1245,9 -1241,9 +1247,9 @@@ void *read_object_with_reference(const return buffer; } /* Handle references */ - else if (!strcmp(type, "commit")) + else if (!strcmp(type, commit_type)) ref_type = "tree "; - else if (!strcmp(type, "tag")) + else if (!strcmp(type, tag_type)) ref_type = "object "; else { free(buffer); @@@ -1629,7 -1625,7 +1631,7 @@@ int index_pipe(unsigned char *sha1, in return -1; } if (!type) - type = "blob"; + type = blob_type; if (write_object) ret = write_sha1_file(buf, off, type, sha1); else { @@@ -1656,7 -1652,7 +1658,7 @@@ int index_fd(unsigned char *sha1, int f return -1; if (!type) - type = "blob"; + type = blob_type; if (write_object) ret = write_sha1_file(buf, size, type, sha1); else { @@@ -1694,9 -1690,9 +1696,9 @@@ int index_path(unsigned char *sha1, con if (!write_object) { unsigned char hdr[50]; int hdrlen; - write_sha1_file_prepare(target, st->st_size, "blob", + write_sha1_file_prepare(target, st->st_size, blob_type, sha1, hdr, &hdrlen); - } else if (write_sha1_file(target, st->st_size, "blob", sha1)) + } else if (write_sha1_file(target, st->st_size, blob_type, sha1)) return error("%s: failed to insert into database", path); free(target);