Skip to content

Commit 0715cc5

Browse files
committed
[bugfix] double-free while create reader failed
1 parent f9597bf commit 0715cc5

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

ucm/store/pcstore/cc/domain/trans/share_buffer.cc

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -314,13 +314,11 @@ std::shared_ptr<ShareBuffer::Reader> ShareBuffer::MakeLocalReader(const std::str
314314
UC_ERROR("Failed to make buffer({}) on host.", blockSize_);
315315
return nullptr;
316316
}
317-
Reader* reader = nullptr;
318317
try {
319-
reader = new Reader{block, path, blockSize_, ioDirect_, false, addr.get()};
320-
return std::shared_ptr<Reader>(reader,
321-
[addr = std::move(addr)](Reader* reader) { delete reader; });
318+
return std::shared_ptr<Reader>(
319+
new Reader{block, path, blockSize_, ioDirect_, false, addr.get()},
320+
[addr = std::move(addr)](Reader* reader) { delete reader; });
322321
} catch (const std::exception& e) {
323-
if (reader) { delete reader; }
324322
UC_ERROR("Failed({}) to create reader.", e.what());
325323
return nullptr;
326324
}
@@ -331,17 +329,19 @@ std::shared_ptr<ShareBuffer::Reader> ShareBuffer::MakeSharedReader(const std::st
331329
size_t position)
332330
{
333331
void* addr = this->BlockAt(position);
334-
Reader* reader = nullptr;
332+
auto reader = new (std::nothrow) Reader(block, path, blockSize_, ioDirect_, true, addr);
333+
if (!reader) [[unlikely]] {
334+
this->ReleaseBlock(position);
335+
UC_ERROR("Failed to create reader.");
336+
return nullptr;
337+
}
335338
try {
336-
reader = new Reader{block, path, blockSize_, ioDirect_, true, addr};
337339
return std::shared_ptr<Reader>(reader, [this, position](Reader* reader) {
338340
delete reader;
339341
this->ReleaseBlock(position);
340342
});
341-
} catch (...) {
342-
this->ReleaseBlock(position);
343-
if (reader) { delete reader; }
344-
UC_ERROR("Failed to create reader.");
343+
} catch (const std::exception& e) {
344+
UC_ERROR("Failed({}) to create reader.", e.what());
345345
return nullptr;
346346
}
347347
}

0 commit comments

Comments
 (0)