Found this when dealing with a "creative" FUSE filesystem. The fuse
filesystem will assume that everything exists and is a directory, so
stat works, cd and file creation do not. The fuse filesystem is clearly
bad, but that is not the point.
Vim will try to mkdir "$TMPDIR/v4sgqHU". If TMPDIR exists in your
environment, it will mkdir "/tmp/v4sgqHU" or whatever you have set it
to. If it doesn't exist, it will literally mkdir "$TMPDIR/v4sgqHU".
In most sane environments "$TMPDIR" doesn't exist as vim works just
fine. Something like:
stat("$TMPDIR", 0x7fffc90aad60) = -1 ENOENT (No such file or directory)
stat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=5620, ...}) = 0
mkdir("/tmp/v3C11LF", 0700) = 0
In my insane fuse environment instead:
stat("$TMPDIR", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
gettimeofday({1430937134, 707649}, NULL) = 0
mkdir("$TMPDIR/v4sgqHU", 0700) = -1 EEXIST (File exists)
mkdir("$TMPDIR/vvuiqHU", 0700) = -1 EEXIST (File exists)
mkdir("$TMPDIR/vWvkqHU", 0700) = -1 EEXIST (File exists)
...
After about 30s and 250k attempts vim aborts and uses /tmp instead.
The vim bug is to try "$TMPDIR" even though the environment variable
isn't set. Arguably that could become a security-issue if I can create
a "$TMPDIR" in a directory I control and trick someone else to open a
file from that directory. So independently of what praise you might
want to heap on my fuse-thing, vim is equally at fault here.
Jörn
--
The key to performance is elegance, not battalions of special cases.
-- Jon Bentley and Doug McIlroy
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.