mirror of
https://github.com/git/git.git
synced 2024-11-24 10:26:17 +08:00
vcs-svn: fix intermittent repo_tree corruption
Pointers to directory entries do not remain valid after a call to dent_insert. Noticed in the course of importing a small Subversion repository (~1000 revs); after setting up a dirent for a certain path as a placeholder, by luck dent_insert would trigger a realloc that shifted around addresses, resulting in an import with that file replaced by a directory. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
97a5e3453a
commit
3c93983875
@ -131,7 +131,7 @@ static void repo_write_dirent(uint32_t *path, uint32_t mode,
|
||||
if (dent == key) {
|
||||
dent->mode = REPO_MODE_DIR;
|
||||
dent->content_offset = 0;
|
||||
dent_insert(&dir->entries, dent);
|
||||
dent = dent_insert(&dir->entries, dent);
|
||||
}
|
||||
|
||||
if (dent_offset(dent) < dent_pool.committed) {
|
||||
@ -142,7 +142,7 @@ static void repo_write_dirent(uint32_t *path, uint32_t mode,
|
||||
dent->name_offset = name;
|
||||
dent->mode = REPO_MODE_DIR;
|
||||
dent->content_offset = dir_o;
|
||||
dent_insert(&dir->entries, dent);
|
||||
dent = dent_insert(&dir->entries, dent);
|
||||
}
|
||||
|
||||
dir = repo_dir_from_dirent(dent);
|
||||
|
Loading…
Reference in New Issue
Block a user