mirror of
https://github.com/NixOS/nix.git
synced 2024-11-23 23:32:28 +00:00
libutil: Limit readLink() error to only overflows.
Let's not just improve the error message itself, but also the behaviour
to actually work around the ntfs-3g symlink bug. If the readlink() call
returns a smaller size than the stat() call, this really isn't a problem
even if the symlink target really has changed between the calls.
So if stat() reports the size for the absolute path, it's most likely
that the relative path is smaller and thus it should also work for file
system bugs as mentioned in 93002d69fc
.
Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Tested-by: John Ericson <Ericson2314@Yahoo.com>
This commit is contained in:
parent
bbd45ac80f
commit
8b88d25cda
@ -196,8 +196,8 @@ Path readLink(const Path & path)
|
||||
ssize_t rlsize = readlink(path.c_str(), buf, st.st_size);
|
||||
if (rlsize == -1)
|
||||
throw SysError(format("reading symbolic link ‘%1%’") % path);
|
||||
else if (rlsize != st.st_size)
|
||||
throw Error(format("symbolic link ‘%1%’ size mismatch %2% != %3%")
|
||||
else if (rlsize > st.st_size)
|
||||
throw Error(format("symbolic link ‘%1%’ size overflow %2% > %3%")
|
||||
% path % rlsize % st.st_size);
|
||||
return string(buf, st.st_size);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user