Fix: Add security asserts.
parent
c82a6d05b0
commit
63dae0a7f2
|
@ -47,48 +47,59 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <assimp/cfileio.h>
|
#include <assimp/cfileio.h>
|
||||||
#include <assimp/IOStream.hpp>
|
#include <assimp/IOStream.hpp>
|
||||||
#include <assimp/IOSystem.hpp>
|
#include <assimp/IOSystem.hpp>
|
||||||
|
#include <assimp/ai_assert.h>
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
|
|
||||||
class CIOSystemWrapper;
|
class CIOSystemWrapper;
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Custom IOStream implementation for the C-API
|
/// @brief Custom IOStream implementation for the C-API-
|
||||||
class CIOStreamWrapper : public IOStream {
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
class CIOStreamWrapper final : public IOStream {
|
||||||
public:
|
public:
|
||||||
explicit CIOStreamWrapper(aiFile *pFile, CIOSystemWrapper *io) :
|
explicit CIOStreamWrapper(aiFile *pFile, CIOSystemWrapper *io);
|
||||||
mFile(pFile),
|
~CIOStreamWrapper() override;
|
||||||
mIO(io) {}
|
size_t Read(void *pvBuffer, size_t pSize, size_t pCount) override;
|
||||||
~CIOStreamWrapper(void);
|
size_t Write(const void *pvBuffer, size_t pSize, size_t pCount) override;
|
||||||
|
aiReturn Seek(size_t pOffset, aiOrigin pOrigin) override;
|
||||||
size_t Read(void *pvBuffer, size_t pSize, size_t pCount);
|
size_t Tell(void) const override;
|
||||||
size_t Write(const void *pvBuffer, size_t pSize, size_t pCount);
|
size_t FileSize() const override;
|
||||||
aiReturn Seek(size_t pOffset, aiOrigin pOrigin);
|
void Flush() override;
|
||||||
size_t Tell(void) const;
|
|
||||||
size_t FileSize() const;
|
|
||||||
void Flush();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
aiFile *mFile;
|
aiFile *mFile;
|
||||||
CIOSystemWrapper *mIO;
|
CIOSystemWrapper *mIO;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CIOSystemWrapper : public IOSystem {
|
inline CIOStreamWrapper::CIOStreamWrapper(aiFile *pFile, CIOSystemWrapper *io) :
|
||||||
|
mFile(pFile),
|
||||||
|
mIO(io) {
|
||||||
|
ai_assert(io != nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
/// @brief Custom IO-System wrapper implementation for the C-API.
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
class CIOSystemWrapper final : public IOSystem {
|
||||||
friend class CIOStreamWrapper;
|
friend class CIOStreamWrapper;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit CIOSystemWrapper(aiFileIO *pFile) :
|
explicit CIOSystemWrapper(aiFileIO *pFile);
|
||||||
mFileSystem(pFile) {}
|
~CIOSystemWrapper() override = default;
|
||||||
|
bool Exists(const char *pFile) const override;
|
||||||
bool Exists(const char *pFile) const;
|
char getOsSeparator() const override;
|
||||||
char getOsSeparator() const;
|
IOStream *Open(const char *pFile, const char *pMode = "rb") override;
|
||||||
IOStream *Open(const char *pFile, const char *pMode = "rb");
|
void Close(IOStream *pFile) override;
|
||||||
void Close(IOStream *pFile);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
aiFileIO *mFileSystem;
|
aiFileIO *mFileSystem;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline CIOSystemWrapper::CIOSystemWrapper(aiFileIO *pFile) : mFileSystem(pFile) {
|
||||||
|
ai_assert(pFile != nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Assimp
|
} // namespace Assimp
|
||||||
|
|
||||||
#endif
|
#endif // AI_CIOSYSTEM_H_INCLUDED
|
||||||
|
|
Loading…
Reference in New Issue