Fix override warning and fix buffer overflow check
This commit is contained in:
+8
-10
@@ -197,8 +197,8 @@ class FileStore {
|
|||||||
* @return 0 if read is a success
|
* @return 0 if read is a success
|
||||||
*/
|
*/
|
||||||
int read(InodeId_t id, typename Header::FsSize_t readStart,
|
int read(InodeId_t id, typename Header::FsSize_t readStart,
|
||||||
typename Header::FsSize_t readSize, void *data,
|
typename Header::FsSize_t readSize, void *data,
|
||||||
typename Header::FsSize_t *size);
|
typename Header::FsSize_t *size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the stat information of the inode of the given inode id.
|
* Reads the stat information of the inode of the given inode id.
|
||||||
@@ -265,8 +265,8 @@ class FileStore {
|
|||||||
* @return 0 if read is a success
|
* @return 0 if read is a success
|
||||||
*/
|
*/
|
||||||
int read(Inode *inode, typename Header::FsSize_t readStart,
|
int read(Inode *inode, typename Header::FsSize_t readStart,
|
||||||
typename Header::FsSize_t readSize, void *data,
|
typename Header::FsSize_t readSize, void *data,
|
||||||
typename Header::FsSize_t *size);
|
typename Header::FsSize_t *size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes the inode of the given ID.
|
* Removes the inode of the given ID.
|
||||||
@@ -579,17 +579,15 @@ int FileStore<Header>::read(InodeId_t id, typename Header::FsSize_t readStart,
|
|||||||
template<typename Header>
|
template<typename Header>
|
||||||
int FileStore<Header>::read(Inode *inode, typename Header::FsSize_t readStart,
|
int FileStore<Header>::read(Inode *inode, typename Header::FsSize_t readStart,
|
||||||
typename Header::FsSize_t readSize, void *data, typename Header::FsSize_t *size) {
|
typename Header::FsSize_t readSize, void *data, typename Header::FsSize_t *size) {
|
||||||
int retval = 1;
|
|
||||||
// be sure read size is not greater than what is available to read
|
// be sure read size is not greater than what is available to read
|
||||||
if (inode->getDataLen() + readStart < readSize) {
|
if (inode->getDataLen() - readStart < readSize) {
|
||||||
readSize = inode->getDataLen();
|
readSize = inode->getDataLen() - readStart;
|
||||||
}
|
}
|
||||||
if (size) {
|
if (size) {
|
||||||
*size = readSize;
|
*size = readSize;
|
||||||
}
|
}
|
||||||
ox_memcpy(data, inode->getData() + readStart, inode->getDataLen());
|
ox_memcpy(data, inode->getData() + readStart, readSize);
|
||||||
retval = 0;
|
return 0;
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Header>
|
template<typename Header>
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class FileSystem {
|
|||||||
public:
|
public:
|
||||||
virtual ~FileSystem() {};
|
virtual ~FileSystem() {};
|
||||||
|
|
||||||
virtual int read(uint64_t inode, void *buffer, size_t *size) = 0;
|
virtual int read(uint64_t inode, void *buffer, size_t size) = 0;
|
||||||
|
|
||||||
virtual int read(uint64_t inode, size_t readStart, size_t readSize, void *buffer, size_t *size) = 0;
|
virtual int read(uint64_t inode, size_t readStart, size_t readSize, void *buffer, size_t *size) = 0;
|
||||||
|
|
||||||
@@ -112,9 +112,9 @@ class FileSystemTemplate: public FileSystem {
|
|||||||
|
|
||||||
int read(const char *path, void *buffer);
|
int read(const char *path, void *buffer);
|
||||||
|
|
||||||
int read(uint64_t inode, void *buffer, size_t *size) override;
|
int read(uint64_t inode, void *buffer, size_t buffSize) override;
|
||||||
|
|
||||||
int read(uint64_t inode, size_t readStart, size_t readSize, void *buffer, size_t *size);
|
int read(uint64_t inode, size_t readStart, size_t readSize, void *buffer, size_t *size) override;
|
||||||
|
|
||||||
uint8_t *read(uint64_t inode, size_t *size) override;
|
uint8_t *read(uint64_t inode, size_t *size) override;
|
||||||
|
|
||||||
@@ -178,12 +178,12 @@ FileStat FileSystemTemplate<FileStore, FS_TYPE>::stat(uint64_t inode) {
|
|||||||
#pragma warning(disable:4244)
|
#pragma warning(disable:4244)
|
||||||
#endif
|
#endif
|
||||||
template<typename FileStore, FsType FS_TYPE>
|
template<typename FileStore, FsType FS_TYPE>
|
||||||
int FileSystemTemplate<FileStore, FS_TYPE>::read(uint64_t inode, void *buffer, size_t *size) {
|
int FileSystemTemplate<FileStore, FS_TYPE>::read(uint64_t inode, void *buffer, size_t buffSize) {
|
||||||
if (size) {
|
auto stat = store->stat(inode);
|
||||||
auto stat = store->stat(inode);
|
if (stat.size <= buffSize) {
|
||||||
*size = stat.size;
|
return store->read(inode, buffer, nullptr);
|
||||||
}
|
}
|
||||||
return store->read(inode, buffer, nullptr);
|
return 0;
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
|||||||
Reference in New Issue
Block a user