diff --git a/src/ox/clargs/clargs.hpp b/src/ox/clargs/clargs.hpp index be250d56c..630b9d2a8 100644 --- a/src/ox/clargs/clargs.hpp +++ b/src/ox/clargs/clargs.hpp @@ -16,12 +16,12 @@ namespace clargs { class ClArgs { private: - std::map m_args; + ::std::map<::std::string, bool> m_args; public: ClArgs(int argc, const char **args); - bool operator[](std::string arg); + bool operator[](::std::string arg); }; } diff --git a/src/ox/fs/filesystem.cpp b/src/ox/fs/filesystem.cpp index b0e5de159..7346ee3fc 100644 --- a/src/ox/fs/filesystem.cpp +++ b/src/ox/fs/filesystem.cpp @@ -10,7 +10,7 @@ namespace ox { namespace fs { -FileSystem *createFileSystem(void *buff) { +FileSystem *createFileSystem(void *buff, size_t buffSize) { auto version = ((FileStore16*) buff)->version(); auto type = ((FileStore16*) buff)->fsType(); FileSystem *fs = nullptr; @@ -33,6 +33,11 @@ FileSystem *createFileSystem(void *buff) { break; } + if (fs->size() > buffSize) { + delete fs; + fs = nullptr; + } + return fs; } diff --git a/src/ox/fs/filesystem.hpp b/src/ox/fs/filesystem.hpp index 8cd1f135d..34980466c 100644 --- a/src/ox/fs/filesystem.hpp +++ b/src/ox/fs/filesystem.hpp @@ -53,7 +53,7 @@ class FileSystem { virtual uint64_t size() = 0; }; -FileSystem *createFileSystem(void *buff); +FileSystem *createFileSystem(void *buff, size_t buffSize); template class FileSystemTemplate: public FileSystem { diff --git a/src/ox/fs/oxfstool.cpp b/src/ox/fs/oxfstool.cpp index 273958e17..cdcc9e586 100644 --- a/src/ox/fs/oxfstool.cpp +++ b/src/ox/fs/oxfstool.cpp @@ -148,7 +148,7 @@ int read(int argc, char **args) { auto fsBuff = loadFileBuff(fsPath, &fsSize); if (fsBuff) { - auto fs = createFileSystem(fsBuff); + auto fs = createFileSystem(fsBuff, fsSize); if (fs) { auto output = fs->read(inode, &fileSize); @@ -195,7 +195,7 @@ int write(int argc, char **args, bool expand) { auto srcBuff = loadFileBuff(srcPath, &srcSize); if (srcBuff) { auto expanded = false; - auto fs = createFileSystem(fsBuff); + auto fs = createFileSystem(fsBuff, fsSize); if (fs) { if (expand && fs->available() <= srcSize) { auto needed = fs->size() + fs->spaceNeeded(inode, srcSize); @@ -206,7 +206,7 @@ int write(int argc, char **args, bool expand) { delete []fsBuff; fsBuff = cloneBuff; - fs = createFileSystem(fsBuff); + fs = createFileSystem(fsBuff, fsSize); fsSize = needed; fs->resize(fsSize); } @@ -264,7 +264,7 @@ int compact(int argc, char **args) { auto fsBuff = loadFileBuff(fsPath, &fsSize); if (fsBuff) { - auto fs = createFileSystem(fsBuff); + auto fs = createFileSystem(fsBuff, fsSize); if (fs) { fs->resize(); @@ -304,7 +304,7 @@ int remove(int argc, char **args) { auto fsBuff = loadFileBuff(fsPath, &fsSize); if (fsBuff) { - auto fs = createFileSystem(fsBuff); + auto fs = createFileSystem(fsBuff, fsSize); if (fs) { err = fs->remove(inode);