On 03/01/09 22:03, Adam Osuchowski wrote:
> There is a race condition in vim 7.2 (and probably in earlier too) on POSIX
> platforms. Below, there is fragment of strace output related to this problem.
>
>
> stat64("testfile~", 0xbfc35dbc)         = -1 ENOENT (No such file or 
> directory)
> stat64("testfile", {st_mode=S_IFREG|0600, st_size=12, ...}) = 0
> unlink("testfile~")                     = -1 ENOENT (No such file or 
> directory)
> rename("testfile", "testfile~")         = 0
> open("testfile", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 3
> write(3, "test test test\n"..., 15)     = 15
> fsync(3)                                = 0
> stat64("testfile", {st_mode=S_IFREG|0600, st_size=15, ...}) = 0
> stat64("testfile", {st_mode=S_IFREG|0600, st_size=15, ...}) = 0
> close(3)                                = 0
>
>
> Problematic situation take place during file saving between rename and open,
> open and write as well as write and close syscalls. There are points at
> which another process attempting to access file may run into trouble.
> There is, for example, possibility to:
>
> - if application, which expects existence of file, would try to open it
>    between vim rename and open syscalls, it will fail due to lack of this
>    file,
>
> - if other process creates file with the same name between vim rename and
>    open syscalls, it will be overriden by vim (it works with symlinks too,
>    so it can be used by attacker to damage other files),
>
> - if application will read file while vim will write to it, the contents
>    may be badly read due to temporarily partially record.
>
> Vim rather should create new, its own, temporary file with unique name,
> write content, close it and then, atomically rename it to original name.
>
> Regards.

See
        :help backup
        :help 'backup'
        :help 'writebackup'
        :help 'backupcopy'
        :help timestamp


Best regards,
Tony.
-- 
ARTHUR:  Be quiet!
DENNIS:  --but by a two-thirds majority in the case of more--
ARTHUR:  Be quiet!  I order you to be quiet!
WOMAN:   Order, eh -- who does he think he is?
ARTHUR:  I am your king!
                                   The Quest for the Holy Grail (Monty 
Python)

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui