[PATCH/WIP 4/7] fast-import: fix data corruption in store_tree
- From
Dmitry Ivankov <divanorama@gmail.com>
- Date
- Jul 28, 2011, 04:46 UTC
- Message-ID
- <1311828370-30477-5-git-send-email-divanorama@gmail.com>
- In-Reply-To
- <1311828370-30477-1-git-send-email-divanorama@gmail.com>
store_tree didn't check for S_ISDIR(versions[1].mode), but it did check for tree != NULL.
It's possible that tree == NULL && S_ISDIR(versions[1].mode) in which case we need to load_tree and then to store_tree, and not to drop that entry. Calling load_tree requires S_ISDIR check to be present, that's why it is added..
Signed-off-by: Dmitry Ivankov <divanorama@gmail.com> --- fast-import.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/fast-import.c b/fast-import.c index d5915b8..d917ea6 100644 --- a/fast-import.c +++ b/fast-import.c @@ -1474,8 +1474,11 @@ static void store_tree(struct tree_entry *root) return; for (i = 0; i < t->entry_count; i++) { - if (t->entries[i]->tree) - store_tree(t->entries[i]); + if (!S_ISDIR(t->entries[i]->versions[1].mode)) + continue; + if (!t->entries[i]->tree) + load_tree(t->entries[i]); + store_tree(t->entries[i]); } le = find_object(root->versions[0].sha1);
-- 1.7.3.4