fast-import: fix segfault in store_tree()

Branch tree is NULLified by filedelete command if we are trying
to delete root tree. Add sanity check and use load_tree() in that case.

Signed-off-by: Maxim Bublis <satori@yandex-team.ru>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Maxim Bublis 2014-08-29 15:53:37 +04:00 committed by Junio C Hamano
parent 8d30d8a89a
commit 2668d692eb
2 changed files with 7 additions and 3 deletions

View File

@ -1419,7 +1419,7 @@ static void mktree(struct tree_content *t, int v, struct strbuf *b)
static void store_tree(struct tree_entry *root) static void store_tree(struct tree_entry *root)
{ {
struct tree_content *t = root->tree; struct tree_content *t;
unsigned int i, j, del; unsigned int i, j, del;
struct last_object lo = { STRBUF_INIT, 0, 0, /* no_swap */ 1 }; struct last_object lo = { STRBUF_INIT, 0, 0, /* no_swap */ 1 };
struct object_entry *le = NULL; struct object_entry *le = NULL;
@ -1427,6 +1427,10 @@ static void store_tree(struct tree_entry *root)
if (!is_null_sha1(root->versions[1].sha1)) if (!is_null_sha1(root->versions[1].sha1))
return; return;
if (!root->tree)
load_tree(root);
t = root->tree;
for (i = 0; i < t->entry_count; i++) { for (i = 0; i < t->entry_count; i++) {
if (t->entries[i]->tree) if (t->entries[i]->tree)
store_tree(t->entries[i]); store_tree(t->entries[i]);

View File

@ -3107,7 +3107,7 @@ D ""
INPUT_END INPUT_END
test_expect_failure 'U: filedelete root succeeds' ' test_expect_success 'U: filedelete root succeeds' '
git fast-import <input git fast-import <input
' '
@ -3117,7 +3117,7 @@ EOF
git diff-tree -M -r U^1 U >actual git diff-tree -M -r U^1 U >actual
test_expect_failure 'U: validate root delete result' ' test_expect_success 'U: validate root delete result' '
compare_diff_raw expect actual compare_diff_raw expect actual
' '