From a48ce3f4aa1266d5b8619cf320a703ba4f697854 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Sun, 31 Jan 2016 02:38:32 -0500 Subject: Refactor API to fix design bug that causes use-after-free on many plugin objects --- tempfile.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) (limited to 'tempfile.cpp') 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)); } -- cgit v1.3.1