Browse Source

Merge branch 'jk/fast-import-fixes' into maint

* jk/fast-import-fixes:
  fast-import: fix buffer overflow in dump_tags
  fast-import: clean up pack_data pointer in end_packfile
maint
Junio C Hamano 10 years ago
parent
commit
04481347ec
  1. 21
      fast-import.c

21
fast-import.c

@ -946,10 +946,12 @@ static void unkeep_all_packs(void)


static void end_packfile(void) static void end_packfile(void)
{ {
struct packed_git *old_p = pack_data, *new_p; if (!pack_data)
return;


clear_delta_base_cache(); clear_delta_base_cache();
if (object_count) { if (object_count) {
struct packed_git *new_p;
unsigned char cur_pack_sha1[20]; unsigned char cur_pack_sha1[20];
char *idx_name; char *idx_name;
int i; int i;
@ -991,10 +993,11 @@ static void end_packfile(void)
pack_id++; pack_id++;
} }
else { else {
close(old_p->pack_fd); close(pack_data->pack_fd);
unlink_or_warn(old_p->pack_name); unlink_or_warn(pack_data->pack_name);
} }
free(old_p); free(pack_data);
pack_data = NULL;


/* We can't carry a delta across packfiles. */ /* We can't carry a delta across packfiles. */
strbuf_release(&last_blob.data); strbuf_release(&last_blob.data);
@ -1731,14 +1734,16 @@ static void dump_tags(void)
static const char *msg = "fast-import"; static const char *msg = "fast-import";
struct tag *t; struct tag *t;
struct ref_lock *lock; struct ref_lock *lock;
char ref_name[PATH_MAX]; struct strbuf ref_name = STRBUF_INIT;


for (t = first_tag; t; t = t->next_tag) { for (t = first_tag; t; t = t->next_tag) {
sprintf(ref_name, "tags/%s", t->name); strbuf_reset(&ref_name);
lock = lock_ref_sha1(ref_name, NULL); strbuf_addf(&ref_name, "tags/%s", t->name);
lock = lock_ref_sha1(ref_name.buf, NULL);
if (!lock || write_ref_sha1(lock, t->sha1, msg) < 0) if (!lock || write_ref_sha1(lock, t->sha1, msg) < 0)
failure |= error("Unable to update %s", ref_name); failure |= error("Unable to update %s", ref_name.buf);
} }
strbuf_release(&ref_name);
} }


static void dump_marks_helper(FILE *f, static void dump_marks_helper(FILE *f,

Loading…
Cancel
Save