diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2016-01-31 02:38:32 -0500 |
|---|---|---|
| committer | Rusty Wagner <rusty.wagner@gmail.com> | 2016-01-31 02:38:32 -0500 |
| commit | a48ce3f4aa1266d5b8619cf320a703ba4f697854 (patch) | |
| tree | b8312cccc35b75b51e0b0e99519460c3e9c2240c /tempfile.cpp | |
| parent | bbb74ee011e2b482e1895a513203c11affbac229 (diff) | |
Refactor API to fix design bug that causes use-after-free on many plugin objects
Diffstat (limited to 'tempfile.cpp')
| -rw-r--r-- | tempfile.cpp | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/tempfile.cpp b/tempfile.cpp index 33256c76..b4578f8d 100644 --- a/tempfile.cpp +++ b/tempfile.cpp @@ -6,41 +6,35 @@ using namespace std; TemporaryFile::TemporaryFile() { - m_file = BNCreateTemporaryFile(); + m_object = BNCreateTemporaryFile(); } TemporaryFile::TemporaryFile(const DataBuffer& contents) { - m_file = BNCreateTemporaryFileWithContents(contents.GetBufferObject()); + m_object = BNCreateTemporaryFileWithContents(contents.GetBufferObject()); } TemporaryFile::TemporaryFile(const string& contents) { DataBuffer buf(contents.c_str(), contents.size()); - m_file = BNCreateTemporaryFileWithContents(buf.GetBufferObject()); + m_object = BNCreateTemporaryFileWithContents(buf.GetBufferObject()); } -TemporaryFile::TemporaryFile(BNTemporaryFile* file): m_file(file) +TemporaryFile::TemporaryFile(BNTemporaryFile* file) { -} - - -TemporaryFile::~TemporaryFile() -{ - if (m_file) - BNFreeTemporaryFile(m_file); + m_object = file; } string TemporaryFile::GetPath() const { - if (!m_file) + if (!m_object) return string(); - char* str = BNGetTemporaryFilePath(m_file); + char* str = BNGetTemporaryFilePath(m_object); string result = str; BNFreeString(str); return result; @@ -49,7 +43,7 @@ string TemporaryFile::GetPath() const DataBuffer TemporaryFile::GetContents() { - if (!m_file) + if (!m_object) return DataBuffer(); - return DataBuffer(BNGetTemporaryFileContents(m_file)); + return DataBuffer(BNGetTemporaryFileContents(m_object)); } |
