Refactor file_store to use smart pointers
Bug: b/119276649 Merge from: http://go/wvgerrit/66367 Test: Android, CE CDM, Linux unit tests The FileSystem interface as it exists expects an Open for a file and then a Close when finished. However, the Close doesn't delete the file itself and depending on the platform, the underlying impl_ as well, leading to a memory leak. To fix this leak as well as harden against future memory issues, this change refactors the interface to shift away from raw pointers and towards smart pointers. Change-Id: I7a7132ea95cd3775796a540f510b698f4f27dd24
This commit is contained in:
@@ -13,6 +13,8 @@
|
||||
|
||||
#include "level3_file_system.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "file_store.h"
|
||||
|
||||
namespace wvoec3 {
|
||||
@@ -29,7 +31,7 @@ class OEMCrypto_Level3AndroidFileSystem : public OEMCrypto_Level3FileSystem {
|
||||
|
||||
private:
|
||||
std::string base_path_;
|
||||
wvcdm::FileSystem *file_system_;
|
||||
std::unique_ptr<wvcdm::FileSystem> file_system_;
|
||||
};
|
||||
|
||||
} // namespace wvoec3
|
||||
|
||||
@@ -16,7 +16,7 @@ using wvcdm::FileSystem;
|
||||
namespace wvoec3 {
|
||||
|
||||
OEMCrypto_Level3AndroidFileSystem::OEMCrypto_Level3AndroidFileSystem()
|
||||
: file_system_(new FileSystem) {
|
||||
: file_system_(new FileSystem()) {
|
||||
const char kDirectoryDelimiter = '/';
|
||||
wvcdm::Properties::GetDeviceFilesBasePath(wvcdm::kSecurityLevelL3,
|
||||
&base_path_);
|
||||
@@ -42,19 +42,15 @@ OEMCrypto_Level3AndroidFileSystem::OEMCrypto_Level3AndroidFileSystem()
|
||||
}
|
||||
}
|
||||
|
||||
OEMCrypto_Level3AndroidFileSystem::~OEMCrypto_Level3AndroidFileSystem() {
|
||||
delete file_system_;
|
||||
file_system_ = NULL;
|
||||
}
|
||||
OEMCrypto_Level3AndroidFileSystem::~OEMCrypto_Level3AndroidFileSystem() {}
|
||||
|
||||
ssize_t OEMCrypto_Level3AndroidFileSystem::Read(const char *filename,
|
||||
void *buffer, size_t size) {
|
||||
File *file = file_system_->Open(base_path_ + std::string(filename),
|
||||
FileSystem::kReadOnly);
|
||||
auto file = file_system_->Open(base_path_ + std::string(filename),
|
||||
FileSystem::kReadOnly);
|
||||
ssize_t bytes_read = 0;
|
||||
if (file) {
|
||||
bytes_read = file->Read(static_cast<char *>(buffer), size);
|
||||
file->Close();
|
||||
}
|
||||
return bytes_read;
|
||||
}
|
||||
@@ -62,12 +58,11 @@ ssize_t OEMCrypto_Level3AndroidFileSystem::Read(const char *filename,
|
||||
ssize_t OEMCrypto_Level3AndroidFileSystem::Write(const char *filename,
|
||||
const void *buffer,
|
||||
size_t size) {
|
||||
File *file = file_system_->Open(base_path_ + std::string(filename),
|
||||
FileSystem::kCreate | FileSystem::kTruncate);
|
||||
auto file = file_system_->Open(base_path_ + std::string(filename),
|
||||
FileSystem::kCreate | FileSystem::kTruncate);
|
||||
ssize_t bytes_written = 0;
|
||||
if (file) {
|
||||
bytes_written = file->Write(static_cast<const char *>(buffer), size);
|
||||
file->Close();
|
||||
}
|
||||
return bytes_written;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user