Examples of errors detected by the V554 diagnostic
V554. Incorrect use of smart pointer.
Chromium
V554 Incorrect use of auto_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. interactive_ui_tests accessibility_win_browsertest.cc 171
void AccessibleContainsAccessible(....)
{
....
auto_ptr<VARIANT> child_array(new VARIANT[child_count]);
....
}
Chromium
V554 Incorrect use of auto_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. interactive_ui_tests accessibility_win_browsertest.cc 306
void AccessibleChecker::CheckAccessibleChildren(
IAccessible* parent) {
....
auto_ptr<VARIANT> child_array(new VARIANT[child_count]);
....
}
Boost (C++ libraries)
V554 Incorrect use of auto_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. tree_to_xml.ipp 71
static std::basic_string<wchar_t> get(char const* source = "")
{
....
std::auto_ptr<wchar_t> result (new wchar_t[len+1]);
....
}
Similar errors can be found in some other places:
- V554 Incorrect use of auto_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. generate_static.hpp 53
Haiku Operation System
V554 Incorrect use of auto_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. DefaultCatalog.cpp 208
status_t
DefaultCatalog::ReadFromFile(const char *path)
{
....
auto_ptr<char> buf(new(std::nothrow) char [sz]);
....
}
Similar errors can be found in some other places:
- V554 Incorrect use of auto_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. DefaultCatalog.cpp 249
OpenToonz
V554 Incorrect use of auto_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. screensavermaker.cpp 29
void makeScreenSaver(....)
{
....
std::auto_ptr<char> swf(new char[swfSize]);
....
}
Casablanca
V554 Incorrect use of shared_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. BlackJack_Server140 table.cpp 471
void DealerTable::FillShoe(size_t decks)
{
std::shared_ptr<int> ss(new int[decks * 52]);
....
}
Nana
V554 Incorrect use of unique_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. text_editor.cpp 3137
void text_editor::_m_draw_string(....) const
{
....
for (auto & ent : reordered)
{
....
std::size_t len = ent.end - ent.begin;
....
if (....)
{
....
}
else if (pos <= a.x && a.x < str_end)
{
....
std::unique_ptr<unsigned> pxbuf_ptr(new unsigned[len]);
}
}
}
Skia Graphics Engine
V554 CWE-762 Incorrect use of unique_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. grglprogrambuilder.cpp 272
GrGLProgram* GrGLProgramBuilder::finalize() {
....
std::unique_ptr<char> binary(new char[length]);
....
}
Memory is allocated using the new [] operator, and is freed using the delete operator.
Skia Graphics Engine
V554 CWE-762 Incorrect use of unique_ptr. The memory allocated with 'malloc' will be cleaned using 'delete'. grglprogrambuilder.cpp 275
GrGLProgram* GrGLProgramBuilder::finalize() {
....
std::unique_ptr<uint8_t> data((uint8_t*) malloc(dataLength));
....
}
Memory is allocated using the malloc function, and is freed using the delete operator.
Android
V554 CWE-762 Incorrect use of unique_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. HeifDecoderAPI.h 62
struct HeifFrameInfo
{
....
void set(....) {
....
mIccData.reset(new uint8_t[iccSize]);
....
}
....
std::unique_ptr<uint8_t> mIccData;
};
Similar errors can be found in some other places:
- V554 CWE-762 Incorrect use of unique_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. atrace.cpp 949
- V554 CWE-762 Incorrect use of unique_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. atrace.cpp 950
- V554 CWE-762 Incorrect use of unique_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. HeifDecoderImpl.cpp 102
- And 2 additional diagnostic messages.
0 A.D.
V554 CWE-762 Incorrect use of shared_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. MapIO.cpp 54
Status LoadHeightmapImageOs(....)
{
....
shared_ptr<u8> fileData = shared_ptr<u8>(new u8[fileSize]);
....
}
LibreOffice
V554 Incorrect use of shared_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. dx_vcltools.cxx 158
struct RawRGBABitmap
{
sal_Int32 mnWidth;
sal_Int32 mnHeight;
std::shared_ptr< sal_uInt8 > mpBitmapData;
};
RawRGBABitmap bitmapFromVCLBitmapEx( const ::BitmapEx& rBmpEx )
{
....
// convert transparent bitmap to 32bit RGBA
// ========================================
const ::Size aBmpSize( rBmpEx.GetSizePixel() );
RawRGBABitmap aBmpData;
aBmpData.mnWidth = aBmpSize.Width();
aBmpData.mnHeight = aBmpSize.Height();
aBmpData.mpBitmapData.reset( new sal_uInt8[ 4*aBmpData.mnWidth
*aBmpData.mnHeight ] );
....
}
Chromium
V554 Incorrect use of unique_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. builtins-trace.cc 64
class MaybeUtf8
{
....
private:
void AllocateSufficientSpace(int len)
{
if (len + 1 > MAX_STACK_LENGTH)
{
allocated_.reset(new uint8_t[len + 1]); // <=
buf_ = allocated_.get();
}
}
....
std::unique_ptr<uint8_t> allocated_; // <=
}
LLVM/Clang
V554 [CWE-762, CERT-MEM51-CPP] Incorrect use of shared_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. RenderScriptRuntime.cpp 2371
std::shared_ptr<uint8_t>
RenderScriptRuntime::GetAllocationData(....) {
....
const uint32_t size = *alloc->size.get();
std::shared_ptr<uint8_t> buffer(new uint8_t[size]);
if (!buffer) {
LLDB_LOGF(log, "%s - couldn't allocate a %" PRIu32 " byte buffer",
__FUNCTION__, size);
return nullptr;
}
....
return buffer;
}
Similar errors can be found in some other places:
- V554 [CWE-762, CERT-MEM51-CPP] Incorrect use of shared_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. RenderScriptRuntime.cpp 2698
CodeLite
V554 Incorrect use of unique_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. clSocketBase.cpp:282
int clSocketBase::ReadMessage(wxString& message, int timeout)
{
....
size_t message_len(0);
....
message_len = ::atoi(....);
....
std::unique_ptr<char> pBuff(new char[message_len]);
....
}
LLVM/Clang
V554 Incorrect use of unique_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. CommandObjectCommands.cpp 1384
std::unique_ptr<OptionDefinition> m_options_definition_up;
Status SetOptionsFromArray(StructuredData::Dictionary &options) {
Status error;
m_num_options = options.GetSize();
m_options_definition_up.reset(new OptionDefinition[m_num_options]);
....
}