bug report

This commit is contained in:
Joey Hess 2022-06-14 14:13:48 -04:00
parent 5ef79125ad
commit e47219bcb5
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38

View file

@ -0,0 +1,17 @@
Similar to [[add_overwrite_race]], several callers of replaceWorkTreeFile
are susceptable to a race. They do some check of the current content of the
file, and then they call that to replace it with something else. But in
between, the file could be overwritten with other content. And that content
then gets replaced, which is not expected behavior.
Some other commands may modify the worktree without using it (oops)
and also be susceptable to a race. `git-annex fix` in fixSymlink, for example,
checks if the file is a symlink, and then deletes and recreates it.
[[!commit 5ef79125ad0eddd5467b6bec451fdcdbd748b96f]] fixed one of these
races, but not in an ideal way.
Better would probably be for replaceWorkTreeFile to be provided with a
InodeCache of the content of the worktree file that is ok to replace.
Then it can move the file to a temp directory, check that it's still
unmodified, and replace it. --[[Joey]]