diff options
Diffstat (limited to 'netfs/daemon/daemonFile.cpp')
-rw-r--r-- | netfs/daemon/daemonFile.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/netfs/daemon/daemonFile.cpp b/netfs/daemon/daemonFile.cpp index 610ee21..7b2dd8e 100644 --- a/netfs/daemon/daemonFile.cpp +++ b/netfs/daemon/daemonFile.cpp @@ -4,6 +4,7 @@ #include <entCache.h> #include <fcntl.h> #include <map> +#include <numeric.h> #include <sys/stat.h> #include <typeConverter.h> #include <unistd.h> @@ -45,14 +46,14 @@ NetFS::Buffer FileServer::read(Ice::Long offset, Ice::Long size, const Ice::Current &) { NetFS::Buffer buf; - buf.resize(size); + buf.resize(safe {size}); errno = 0; - auto r = pread(fd, &buf[0], size, offset); + auto r = pread(fd, &buf[0], safe {size}, offset); if (r == -1) { throw NetFS::SystemError(errno); } - else if (r != size) { - buf.resize(r); + else if (std::cmp_not_equal(r, size)) { + buf.resize(safe {r}); } return buf; } @@ -61,7 +62,7 @@ void FileServer::write(Ice::Long offset, Ice::Long size, const NetFS::Buffer data, const Ice::Current &) { errno = 0; - if (pwrite(fd, &data.front(), size, offset) != size) { + if (pwrite(fd, &data.front(), safe {size}, offset) != size) { throw NetFS::SystemError(errno); } } @@ -73,7 +74,7 @@ FileServer::copyrange(NetFS::FilePrxPtr to, Ice::Long offsrc, Ice::Long offdst, if (auto obj = ice.adapter->findByProxy(to); auto file = std::dynamic_pointer_cast<FileServer>(obj)) { errno = 0; off_t src = offsrc, dst = offdst; - if (auto rtn = copy_file_range(fd, &src, file->fd, &dst, size, flags); rtn != -1) { + if (auto rtn = copy_file_range(fd, &src, file->fd, &dst, safe {size}, safe {flags}); rtn != -1) { return rtn; } throw NetFS::SystemError(errno); |