Package: zsh
Version: 4.3.2-22
The bug occurs when $PWD points to the wrong directory (stat for $PWD
and . differ) and the current directory is in a bind mount with source
and target directory on the same device. The source and target
directory must not be in the same directory.
This bug can be reproduced running this:
# setup
mkdir -p /tmp/a/b/c /tmp/bind
mount -o bind /tmp/a/b /tmp/bind
cd /tmp/bind
# bug if output is "."
PWD=/tmp zsh -c pwd
# cleanup
cd /
umount /tmp/bind
rm -r /tmp/a /tmp/bind
The bug is in zgetdir(). The assumption made by zsh is:
"If st_dev (from stat) for . and .. is the same then the inode for .
reported by stat will be the same as the inode reported by readdir for
the directory entry of . in .."
This is not true for bind mounts with source and target directory on
the same device: the directory entry has the inode of the target
directory of the mount. This can be found in compat.c:311.
Not defining HAVE_STRUCT_DIRENT_D_INO or defining USE_GETCWD helps, I
don't know if there is any other good way to solve this.
I also reported this to the zsh-workers mailing list
(http://www.zsh.org/mla/workers/2006/msg00847.html).
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]