Fix memory leak
authorHwankyu Jhun <h.jhun@samsung.com>
Tue, 27 Oct 2020 08:40:31 +0000 (17:40 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Tue, 27 Oct 2020 10:05:34 +0000 (19:05 +0900)
Change-Id: I3f0e971d00ff4c7d9f32ce68ab152d165bc55fda
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/bundle_cpp.cc

index e44e8a9..617aecc 100644 (file)
@@ -151,9 +151,15 @@ const std::string& Bundle::KeyInfo::GetName() const {
 
 Bundle& Bundle::operator = (const Bundle& b) {
   if (this != &b) {
+    if (impl_->handle_ && (impl_->own_ || impl_->copy_))
+      bundle_free(impl_->handle_);
+
     impl_->handle_ = bundle_dup(b.impl_->handle_);
     if (impl_->handle_ == nullptr)
       throw std::bad_alloc();
+
+    impl_->own_ = true;
+    impl_->copy_ = true;
   }
   return *this;
 }
@@ -165,8 +171,13 @@ Bundle::Bundle(Bundle&& b) noexcept {
 
 Bundle& Bundle::operator = (Bundle&& b) noexcept {
   if (this != &b) {
+    if (impl_->handle_ && (impl_->own_ || impl_->copy_))
+      bundle_free(impl_->handle_);
+
     impl_->handle_ = b.impl_->handle_;
     b.impl_->handle_ = nullptr;
+    impl_->own_ = b.impl_->own_;
+    impl_->copy_ = b.impl_->copy_;
   }
   return *this;
 }