diff options
author | Maxim Bublis <satori@yandex-team.ru> | 2014-08-29 13:53:37 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-08-29 19:31:14 +0200 |
commit | 2668d692eb1af63097628447f2e0c783b1a45e2e (patch) | |
tree | 941bfb5a89e5a0b21c797d560eb804272130434c | |
parent | t9300: test filedelete command (diff) | |
download | git-2668d692eb1af63097628447f2e0c783b1a45e2e.tar.xz git-2668d692eb1af63097628447f2e0c783b1a45e2e.zip |
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>
Diffstat (limited to '')
-rw-r--r-- | fast-import.c | 6 | ||||
-rwxr-xr-x | t/t9300-fast-import.sh | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/fast-import.c b/fast-import.c index d73f58cbe3..e380804831 100644 --- a/fast-import.c +++ b/fast-import.c @@ -1419,7 +1419,7 @@ static void mktree(struct tree_content *t, int v, struct strbuf *b) static void store_tree(struct tree_entry *root) { - struct tree_content *t = root->tree; + struct tree_content *t; unsigned int i, j, del; struct last_object lo = { STRBUF_INIT, 0, 0, /* no_swap */ 1 }; 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)) return; + if (!root->tree) + load_tree(root); + t = root->tree; + for (i = 0; i < t->entry_count; i++) { if (t->entries[i]->tree) store_tree(t->entries[i]); diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index 9cf5e45ae7..d400442a4a 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -3107,7 +3107,7 @@ D "" INPUT_END -test_expect_failure 'U: filedelete root succeeds' ' +test_expect_success 'U: filedelete root succeeds' ' git fast-import <input ' @@ -3117,7 +3117,7 @@ EOF 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 ' |