From 8b88d25cda1467018bdbe1659e6b994a2e66f4fb Mon Sep 17 00:00:00 2001 From: aszlig Date: Fri, 2 Jan 2015 03:45:47 +0100 Subject: [PATCH] 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 93002d69fc58c2b71e2dfad202139230c630c53a. Signed-off-by: aszlig Tested-by: John Ericson --- src/libutil/util.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libutil/util.cc b/src/libutil/util.cc index 879f9fb5f..0d903f2f0 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -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); }