mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
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:
parent
8d30d8a89a
commit
2668d692eb
@ -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]);
|
||||||
|
@ -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
|
||||||
'
|
'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user