From b7775d3d820f76a776c44102a43a79e1a2e8eb28 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Fri, 14 Apr 2017 01:05:18 -0500 Subject: [PATCH] Fix override warning and fix buffer overflow check --- src/ox/fs/filestore.hpp | 18 ++++++++---------- src/ox/fs/filesystem.hpp | 16 ++++++++-------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/ox/fs/filestore.hpp b/src/ox/fs/filestore.hpp index 166f1f354..d3bcfeeea 100644 --- a/src/ox/fs/filestore.hpp +++ b/src/ox/fs/filestore.hpp @@ -197,8 +197,8 @@ class FileStore { * @return 0 if read is a success */ int read(InodeId_t id, 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); /** * 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 */ int 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); /** * Removes the inode of the given ID. @@ -579,17 +579,15 @@ int FileStore
::read(InodeId_t id, typename Header::FsSize_t readStart, template int FileStore
::read(Inode *inode, typename Header::FsSize_t readStart, 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 - if (inode->getDataLen() + readStart < readSize) { - readSize = inode->getDataLen(); + if (inode->getDataLen() - readStart < readSize) { + readSize = inode->getDataLen() - readStart; } if (size) { *size = readSize; } - ox_memcpy(data, inode->getData() + readStart, inode->getDataLen()); - retval = 0; - return retval; + ox_memcpy(data, inode->getData() + readStart, readSize); + return 0; } template diff --git a/src/ox/fs/filesystem.hpp b/src/ox/fs/filesystem.hpp index bb06d0234..e31af75e9 100644 --- a/src/ox/fs/filesystem.hpp +++ b/src/ox/fs/filesystem.hpp @@ -34,7 +34,7 @@ class FileSystem { public: 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; @@ -112,9 +112,9 @@ class FileSystemTemplate: public FileSystem { 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; @@ -178,12 +178,12 @@ FileStat FileSystemTemplate::stat(uint64_t inode) { #pragma warning(disable:4244) #endif template -int FileSystemTemplate::read(uint64_t inode, void *buffer, size_t *size) { - if (size) { - auto stat = store->stat(inode); - *size = stat.size; +int FileSystemTemplate::read(uint64_t inode, void *buffer, size_t buffSize) { + auto stat = store->stat(inode); + if (stat.size <= buffSize) { + return store->read(inode, buffer, nullptr); } - return store->read(inode, buffer, nullptr); + return 0; ; } #ifdef _MSC_VER