summaryrefslogtreecommitdiff
path: root/netfs/daemon/daemonFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'netfs/daemon/daemonFile.cpp')
-rw-r--r--netfs/daemon/daemonFile.cpp13
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);