Add size check to createFileSystem
This commit is contained in:
@@ -16,12 +16,12 @@ namespace clargs {
|
|||||||
|
|
||||||
class ClArgs {
|
class ClArgs {
|
||||||
private:
|
private:
|
||||||
std::map<std::string, bool> m_args;
|
::std::map<::std::string, bool> m_args;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ClArgs(int argc, const char **args);
|
ClArgs(int argc, const char **args);
|
||||||
|
|
||||||
bool operator[](std::string arg);
|
bool operator[](::std::string arg);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
namespace ox {
|
namespace ox {
|
||||||
namespace fs {
|
namespace fs {
|
||||||
|
|
||||||
FileSystem *createFileSystem(void *buff) {
|
FileSystem *createFileSystem(void *buff, size_t buffSize) {
|
||||||
auto version = ((FileStore16*) buff)->version();
|
auto version = ((FileStore16*) buff)->version();
|
||||||
auto type = ((FileStore16*) buff)->fsType();
|
auto type = ((FileStore16*) buff)->fsType();
|
||||||
FileSystem *fs = nullptr;
|
FileSystem *fs = nullptr;
|
||||||
@@ -33,6 +33,11 @@ FileSystem *createFileSystem(void *buff) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fs->size() > buffSize) {
|
||||||
|
delete fs;
|
||||||
|
fs = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
return fs;
|
return fs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class FileSystem {
|
|||||||
virtual uint64_t size() = 0;
|
virtual uint64_t size() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
FileSystem *createFileSystem(void *buff);
|
FileSystem *createFileSystem(void *buff, size_t buffSize);
|
||||||
|
|
||||||
template<typename FileStore, FsType FS_TYPE>
|
template<typename FileStore, FsType FS_TYPE>
|
||||||
class FileSystemTemplate: public FileSystem {
|
class FileSystemTemplate: public FileSystem {
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ int read(int argc, char **args) {
|
|||||||
auto fsBuff = loadFileBuff(fsPath, &fsSize);
|
auto fsBuff = loadFileBuff(fsPath, &fsSize);
|
||||||
|
|
||||||
if (fsBuff) {
|
if (fsBuff) {
|
||||||
auto fs = createFileSystem(fsBuff);
|
auto fs = createFileSystem(fsBuff, fsSize);
|
||||||
|
|
||||||
if (fs) {
|
if (fs) {
|
||||||
auto output = fs->read(inode, &fileSize);
|
auto output = fs->read(inode, &fileSize);
|
||||||
@@ -195,7 +195,7 @@ int write(int argc, char **args, bool expand) {
|
|||||||
auto srcBuff = loadFileBuff(srcPath, &srcSize);
|
auto srcBuff = loadFileBuff(srcPath, &srcSize);
|
||||||
if (srcBuff) {
|
if (srcBuff) {
|
||||||
auto expanded = false;
|
auto expanded = false;
|
||||||
auto fs = createFileSystem(fsBuff);
|
auto fs = createFileSystem(fsBuff, fsSize);
|
||||||
if (fs) {
|
if (fs) {
|
||||||
if (expand && fs->available() <= srcSize) {
|
if (expand && fs->available() <= srcSize) {
|
||||||
auto needed = fs->size() + fs->spaceNeeded(inode, srcSize);
|
auto needed = fs->size() + fs->spaceNeeded(inode, srcSize);
|
||||||
@@ -206,7 +206,7 @@ int write(int argc, char **args, bool expand) {
|
|||||||
delete []fsBuff;
|
delete []fsBuff;
|
||||||
|
|
||||||
fsBuff = cloneBuff;
|
fsBuff = cloneBuff;
|
||||||
fs = createFileSystem(fsBuff);
|
fs = createFileSystem(fsBuff, fsSize);
|
||||||
fsSize = needed;
|
fsSize = needed;
|
||||||
fs->resize(fsSize);
|
fs->resize(fsSize);
|
||||||
}
|
}
|
||||||
@@ -264,7 +264,7 @@ int compact(int argc, char **args) {
|
|||||||
|
|
||||||
auto fsBuff = loadFileBuff(fsPath, &fsSize);
|
auto fsBuff = loadFileBuff(fsPath, &fsSize);
|
||||||
if (fsBuff) {
|
if (fsBuff) {
|
||||||
auto fs = createFileSystem(fsBuff);
|
auto fs = createFileSystem(fsBuff, fsSize);
|
||||||
|
|
||||||
if (fs) {
|
if (fs) {
|
||||||
fs->resize();
|
fs->resize();
|
||||||
@@ -304,7 +304,7 @@ int remove(int argc, char **args) {
|
|||||||
|
|
||||||
auto fsBuff = loadFileBuff(fsPath, &fsSize);
|
auto fsBuff = loadFileBuff(fsPath, &fsSize);
|
||||||
if (fsBuff) {
|
if (fsBuff) {
|
||||||
auto fs = createFileSystem(fsBuff);
|
auto fs = createFileSystem(fsBuff, fsSize);
|
||||||
|
|
||||||
if (fs) {
|
if (fs) {
|
||||||
err = fs->remove(inode);
|
err = fs->remove(inode);
|
||||||
|
|||||||
Reference in New Issue
Block a user