summaryrefslogtreecommitdiff
path: root/netfs/fuse
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2022-04-15 13:26:25 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2022-04-15 13:38:28 +0100
commit480296911f442e16d3f81be8d1adf2902e07d734 (patch)
treec63ed207b86ac2f0113324e688e516eb9fccec93 /netfs/fuse
parentFix whitespace (diff)
downloadnetfs-480296911f442e16d3f81be8d1adf2902e07d734.tar.bz2
netfs-480296911f442e16d3f81be8d1adf2902e07d734.tar.xz
netfs-480296911f442e16d3f81be8d1adf2902e07d734.zip
Safe numeric conversions
Diffstat (limited to 'netfs/fuse')
-rw-r--r--netfs/fuse/fuseApp.cpp5
-rw-r--r--netfs/fuse/fuseApp.h4
-rw-r--r--netfs/fuse/fuseDirs.cpp3
-rw-r--r--netfs/fuse/fuseFiles.cpp17
-rw-r--r--netfs/fuse/fuseFiles.h2
-rw-r--r--netfs/fuse/fuseMisc.cpp9
6 files changed, 22 insertions, 18 deletions
diff --git a/netfs/fuse/fuseApp.cpp b/netfs/fuse/fuseApp.cpp
index b6d59b1..cfd9689 100644
--- a/netfs/fuse/fuseApp.cpp
+++ b/netfs/fuse/fuseApp.cpp
@@ -10,6 +10,7 @@
#include <cstring>
#include <defaultMapper.h>
#include <entCache.h>
+#include <numeric.h>
#include <safeMapFind.h>
#include <slicer/slicer.h>
#include <uriParse.h>
@@ -19,7 +20,7 @@ namespace AdHoc {
template class CallCacheable<struct stat, std::string>;
}
-NetFS::FuseApp::FuseApp(Ice::StringSeq && a) : iceArgs(std::move(a)), sessionOpened(false), openHandleId(0) { }
+NetFS::FuseApp::FuseApp(Ice::StringSeq && a) : iceArgs(std::move(a)) { }
NetFS::FuseApp::~FuseApp()
{
@@ -296,6 +297,6 @@ NetFS::ReqEnv
NetFS::FuseApp::reqEnv()
{
struct fuse_context * c = fuse_get_context();
- const auto t = converter.mapper->mapFileSystem(c->uid, c->gid);
+ const auto t = converter.mapper->mapFileSystem(safe {c->uid}, safe {c->gid});
return {t.username, t.groupname};
}
diff --git a/netfs/fuse/fuseApp.h b/netfs/fuse/fuseApp.h
index 9eafb7f..187e2ba 100644
--- a/netfs/fuse/fuseApp.h
+++ b/netfs/fuse/fuseApp.h
@@ -103,13 +103,13 @@ namespace NetFS {
NetFS::VolumePrxPtr volume;
NetFS::ServicePrxPtr service;
Glacier2::SessionPrxPtr session;
- bool sessionOpened;
+ bool sessionOpened {false};
std::string mountPoint;
OpenDirs openDirs;
OpenFiles openFiles;
- int openHandleId;
+ int openHandleId {0};
EntryTypeConverter converter;
diff --git a/netfs/fuse/fuseDirs.cpp b/netfs/fuse/fuseDirs.cpp
index b03282e..bc13cd1 100644
--- a/netfs/fuse/fuseDirs.cpp
+++ b/netfs/fuse/fuseDirs.cpp
@@ -1,6 +1,7 @@
#include "fuseDirs.h"
#include <entCache.h>
#include <lockHelpers.h>
+#include <numeric.h>
namespace NetFS {
FuseApp::OpenDir::OpenDir(DirectoryPrxPtr r, std::string p) : remote(std::move(r)), path(std::move(p)) { }
@@ -75,7 +76,7 @@ namespace NetFS {
FuseApp::mkdir(const char * p, mode_t m)
{
try {
- volume->mkdir(reqEnv(), p, m);
+ volume->mkdir(reqEnv(), p, safe {m});
return 0;
}
catch (SystemError & e) {
diff --git a/netfs/fuse/fuseFiles.cpp b/netfs/fuse/fuseFiles.cpp
index 8014732..3d23338 100644
--- a/netfs/fuse/fuseFiles.cpp
+++ b/netfs/fuse/fuseFiles.cpp
@@ -4,6 +4,7 @@
#include <cstring>
#include <entCache.h>
#include <mutex>
+#include <numeric.h>
namespace NetFS {
FuseApp::OpenFile::WriteState::WriteState() : future(promise.get_future().share()) { }
@@ -67,7 +68,7 @@ namespace NetFS {
FuseApp::create(const char * p, mode_t m, struct fuse_file_info * fi)
{
try {
- auto remote = volume->create(reqEnv(), p, fi->flags, m);
+ auto remote = volume->create(reqEnv(), p, fi->flags, safe {m});
setProxy<OpenFilePtr>(fi->fh, remote, p, fi->flags);
return 0;
}
@@ -143,20 +144,20 @@ namespace NetFS {
FuseApp::read(const char *, char * buf, size_t s, off_t o, struct fuse_file_info * fi)
{
try {
- auto cpy = [buf](const auto && data) {
+ auto cpy = [buf](const auto && data) -> int {
memcpy(buf, &data.front(), data.size());
- return data.size();
+ return safe {data.size()};
};
auto of = getProxy<OpenFilePtr>(fi->fh);
auto remote = of->remote;
if (fcr->Async) {
auto p = waitOnWriteRangeAndThen<std::future<Buffer>>(s, o, of, [o, s, &remote](const auto &) {
- return remote->readAsync(o, s);
+ return remote->readAsync(o, safe {s});
});
return cpy(p.get());
}
else {
- return cpy(remote->read(o, s));
+ return cpy(remote->read(o, safe {s}));
}
}
catch (SystemError & e) {
@@ -191,9 +192,9 @@ namespace NetFS {
});
}
else {
- remote->write(o, s, Buffer(buf, buf + s));
+ remote->write(o, safe {s}, Buffer(buf, buf + s));
}
- return s;
+ return safe {s};
}
catch (SystemError & e) {
return -e.syserrno;
@@ -211,7 +212,7 @@ namespace NetFS {
auto remote_out = of_out->remote;
of_in->wait();
of_out->wait();
- return remote_in->copyrange(remote_out, offset_in, offset_out, size, flags);
+ return remote_in->copyrange(remote_out, offset_in, offset_out, safe {size}, flags);
}
catch (SystemError & e) {
return -e.syserrno;
diff --git a/netfs/fuse/fuseFiles.h b/netfs/fuse/fuseFiles.h
index 9143836..16ded5e 100644
--- a/netfs/fuse/fuseFiles.h
+++ b/netfs/fuse/fuseFiles.h
@@ -22,7 +22,7 @@ namespace NetFS {
std::promise<void> promise;
std::shared_future<void> future;
};
- using BGs = boost::icl::interval_map<Ice::Long, std::shared_ptr<WriteState>>;
+ using BGs = boost::icl::interval_map<size_t, std::shared_ptr<WriteState>>;
static BGs::interval_type range(off_t, size_t);
BGs bg;
mutable std::shared_mutex _lock;
diff --git a/netfs/fuse/fuseMisc.cpp b/netfs/fuse/fuseMisc.cpp
index 36a695b..8069234 100644
--- a/netfs/fuse/fuseMisc.cpp
+++ b/netfs/fuse/fuseMisc.cpp
@@ -1,6 +1,7 @@
#include "fuseApp.h"
#include <cstring>
#include <entCache.h>
+#include <numeric.h>
int
NetFS::FuseApp::access(const char * p, int a)
@@ -12,7 +13,7 @@ int
NetFS::FuseApp::chmod(const char * p, mode_t m, fuse_file_info *)
{
try {
- volume->chmod(reqEnv(), p, m);
+ volume->chmod(reqEnv(), p, safe {m});
return 0;
}
catch (NetFS::SystemError & e) {
@@ -24,7 +25,7 @@ int
NetFS::FuseApp::chown(const char * p, uid_t u, gid_t g, fuse_file_info *)
{
try {
- volume->chown(reqEnv(), p, u, g);
+ volume->chown(reqEnv(), p, safe {u}, safe {g});
return 0;
}
catch (NetFS::SystemError & e) {
@@ -48,7 +49,7 @@ int
NetFS::FuseApp::mknod(const char * p, mode_t mode, dev_t dev)
{
try {
- volume->mknod(reqEnv(), p, mode, dev);
+ volume->mknod(reqEnv(), p, safe {mode}, safe {dev});
return 0;
}
catch (NetFS::SystemError & e) {
@@ -86,7 +87,7 @@ int
NetFS::FuseApp::rename(const char * p1, const char * p2, unsigned int flags)
{
try {
- volume->rename(reqEnv(), p1, p2, flags);
+ volume->rename(reqEnv(), p1, p2, safe {flags});
return 0;
}
catch (NetFS::SystemError & e) {