X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fmount_image.c;h=b00a2a686c28bcb7cebb67f97f4d18d562bb8187;hb=14b6656962ad607e3ab45a3ccbc57464ff4a6c6f;hp=785620197c857492f30cf83b1c63e4af15e2a178;hpb=5873df008e648b9646b07c7d4eeda511adf92e28;p=wimlib diff --git a/src/mount_image.c b/src/mount_image.c index 78562019..b00a2a68 100644 --- a/src/mount_image.c +++ b/src/mount_image.c @@ -2024,10 +2024,16 @@ wimfs_readlink(const char *path, char *buf, size_t buf_len) return -errno; if (!inode_is_symlink(inode)) return -EINVAL; - - ret = inode_readlink(inode, buf, buf_len, ctx->wim, true); - if (ret > 0) + if (buf_len == 0) + return -ENAMETOOLONG; + ret = inode_readlink(inode, buf, buf_len - 1, ctx->wim, true); + if (ret >= 0) { + wimlib_assert(ret <= buf_len - 1); + buf[ret] = '\0'; ret = 0; + } else if (ret == -ENAMETOOLONG) { + buf[buf_len - 1] = '\0'; + } return ret; }