Merge branch 'maint'
authorJunio C Hamano <junkio@cox.net>
Fri, 7 Apr 2006 23:51:55 +0000 (16:51 -0700)
committerJunio C Hamano <junkio@cox.net>
Fri, 7 Apr 2006 23:51:55 +0000 (16:51 -0700)
* maint:
  count-delta: match get_delta_hdr_size() changes.
  check patch_delta bounds more carefully

1  2 
sha1_file.c

diff --combined 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;
        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;
        }
        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);
        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);