Let we print error log if malloc failed.
There was some codes that we assume malloc success always.
This is not safe. So we have to add some guard codes for malloc failed cases.
Change-Id: Ie2f3500258ba2c33a3df1adf492d56f3235048f1
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
compressedBuffer = (uint8_t*)malloc(bufferSize);
if(DALI_UNLIKELY(compressedBuffer == nullptr))
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %zu\n", bufferSize);
return 0u;
}
outBufferData.isBufferOwned = true;
compressedBuffer = (uint8_t*)malloc(bufferSize);
if(DALI_UNLIKELY(compressedBuffer == nullptr))
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %zu\n", bufferSize);
return 0u;
}
outBufferData.isBufferOwned = true;
uint8_t* __restrict__ tempBuffer = (uint8_t*)malloc(outBufferData.height * (widthByte + 1));
if(DALI_UNLIKELY(tempBuffer == nullptr))
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", outBufferData.height * (widthByte + 1));
return 0u;
}
compressedBuffer = (uint8_t*)malloc(bufferSize);
if(DALI_UNLIKELY(compressedBuffer == nullptr))
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %zu\n", bufferSize);
free(tempBuffer);
return 0u;
}
uint8_t* stagingBuffer = reinterpret_cast<uint8_t*>(malloc(info.srcSize));
- uint8_t* srcMemory = &reinterpret_cast<uint8_t*>(source.memorySource.memory)[info.srcOffset];
+ if(DALI_UNLIKELY(stagingBuffer == nullptr))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", info.srcSize);
+ }
+ else
+ {
+ uint8_t* srcMemory = &reinterpret_cast<uint8_t*>(source.memorySource.memory)[info.srcOffset];
- std::copy(srcMemory, srcMemory + info.srcSize, stagingBuffer);
+ std::copy(srcMemory, srcMemory + info.srcSize, stagingBuffer);
- mTextureUploadTotalCPUMemoryUsed += info.srcSize;
+ mTextureUploadTotalCPUMemoryUsed += info.srcSize;
+ }
// store staging buffer
source.memorySource.memory = stagingBuffer;
/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
mSetForGLRecycling = false;
// if different buffer spec, we need new buffer
- if(!(createInfo.size == mCreateInfo.size
- && createInfo.allocationCallbacks == mCreateInfo.allocationCallbacks
- && createInfo.propertiesFlags == mCreateInfo.propertiesFlags
- && createInfo.usage == mCreateInfo.usage
- && createInfo.nextExtension == mCreateInfo.nextExtension ))
+ if(!(createInfo.size == mCreateInfo.size &&
+ createInfo.allocationCallbacks == mCreateInfo.allocationCallbacks &&
+ createInfo.propertiesFlags == mCreateInfo.propertiesFlags &&
+ createInfo.usage == mCreateInfo.usage &&
+ createInfo.nextExtension == mCreateInfo.nextExtension))
{
return false;
}
else
{
mBufferPtr = malloc(mCreateInfo.size);
+ if(DALI_UNLIKELY(mBufferPtr == nullptr))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", mCreateInfo.size);
+ }
}
}
}
else
{
- auto retval = malloc(size);
- mMappedPointer = retval;
+ auto retval = malloc(size);
+ mMappedPointer = retval;
+ if(DALI_UNLIKELY(mMappedPointer == nullptr))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", size);
+ }
mIsAllocatedLocally = true;
}
}
/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
if(DALI_LIKELY(!fseek(fp, 0, SEEK_SET)))
{
- globalMap = reinterpret_cast<GifByteType*>(malloc(sizeof(GifByteType) * length));
- length = fread(globalMap, sizeof(GifByteType), length, fp);
+ globalMap = reinterpret_cast<GifByteType*>(malloc(sizeof(GifByteType) * static_cast<unsigned long long>(length)));
+ if(DALI_UNLIKELY(globalMap == nullptr))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %llu\n", sizeof(GifByteType) * static_cast<unsigned long long>(length));
+ return false;
+ }
+ length = fread(globalMap, sizeof(GifByteType), length, fp);
}
else
{
if(DALI_LIKELY(!fseek(fp, 0, SEEK_SET)))
{
globalMap = reinterpret_cast<GifByteType*>(malloc(sizeof(GifByteType) * blobSize));
- length = fread(globalMap, sizeof(GifByteType), blobSize, fp);
- succeeded = true;
+ if(DALI_UNLIKELY(globalMap == nullptr))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %zu\n", sizeof(GifByteType) * blobSize);
+ }
+ else
+ {
+ length = fread(globalMap, sizeof(GifByteType), blobSize, fp);
+ succeeded = true;
+ }
}
else
{
pixelsOut = static_cast<uint8_t*>(malloc(widthOut * heightOut * pixelSize));
if(nullptr == pixelsOut)
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u x %u x %u\n", widthOut, heightOut, pixelSize);
widthOut = 0u;
heightOut = 0u;
pixelsOut = static_cast<uint8_t*>(malloc(widthIn * heightIn * pixelSize));
if(nullptr == pixelsOut)
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u x %u x %u\n", widthIn, heightIn, pixelSize);
// Return if the memory allocations fails.
return false;
}
pixelsOut = static_cast<uint8_t*>(malloc(widthOut * heightOut * pixelSize));
if(nullptr == pixelsOut)
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u x %u x %u\n", widthOut, heightOut, pixelSize);
widthOut = 0u;
heightOut = 0u;
if(nullptr == pixelsOut)
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u x %u x %u\n", widthOut, heightOut, pixelSize);
widthOut = 0u;
heightOut = 0u;
if(nullptr == pixelsOut)
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u x %u x %u\n", widthOut, heightOut, pixelSize);
widthOut = 0u;
heightOut = 0u;
if(nullptr == pixelsOut)
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u x %u x %u\n", widthOut, heightOut, pixelSize);
widthOut = 0u;
heightOut = 0u;
if(nullptr == pixelsOut)
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u x %u x %u\n", widthOut, heightOut, pixelSize);
widthOut = 0u;
heightOut = 0u;
auto planeSize = tjPlaneSizeYUV(i, scaledPostXformWidth, 0, scaledPostXformHeight, chrominanceSubsampling);
uint8_t* buffer = static_cast<uint8_t*>(malloc(planeSize));
- if(!buffer)
+ if(DALI_UNLIKELY(!buffer))
{
DALI_LOG_ERROR("Buffer allocation is failed [%d]\n", planeSize);
pixelBuffers.clear();
uint8_t* cmykBuffer = static_cast<uint8_t*>(malloc(sizeof(uint8_t) * scaledPostXformWidth * scaledPostXformHeight * cmykBytesPerPixel));
+ if(DALI_UNLIKELY(!cmykBuffer))
+ {
+ DALI_LOG_ERROR("cmykBuffer allocation is failed [%zu]\n", sizeof(uint8_t) * scaledPostXformWidth * scaledPostXformHeight * cmykBytesPerPixel);
+ return false;
+ }
+
decodeResult = tjDecompress2(jpeg.get(), jpegBufferPtr, jpegBufferSize, reinterpret_cast<uint8_t*>(cmykBuffer), scaledPreXformWidth, 0, scaledPreXformHeight, pixelLibJpegType, flags);
if(DALI_UNLIKELY(decodeResult == -1 && IsJpegDecodingFailed()))
{
/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
rows = reinterpret_cast<png_bytep*>(malloc(sizeof(png_bytep) * height));
if(DALI_UNLIKELY(!rows))
{
- DALI_LOG_ERROR("malloc is failed\n");
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %zu\n", sizeof(png_bytep) * height);
return false;
}
if(bufferSize > 0)
{
buffer = static_cast<uint8_t*>(malloc(bufferSize));
+ if(DALI_UNLIKELY(!buffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", bufferSize);
+ }
#if defined(DEBUG_ENABLED)
gPixelBufferAllocationTotal += bufferSize;
#endif
if(mBufferSize > 0)
{
destBuffer = static_cast<uint8_t*>(malloc(mBufferSize));
+ if(DALI_UNLIKELY(!destBuffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", mBufferSize);
+ return Dali::PixelData();
+ }
memcpy(destBuffer, mBuffer, mBufferSize);
}
ReleaseBuffer();
mBuffer = reinterpret_cast<unsigned char*>(malloc(size));
mBufferSize = size;
+ if(DALI_UNLIKELY(!mBuffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", mBufferSize);
+ }
#if defined(DEBUG_ENABLED)
gPixelBufferAllocationTotal += size;
#endif
/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
if(DALI_LIKELY(!fseek(fp, 0, SEEK_SET)))
{
- mBuffer = reinterpret_cast<WebPByteType*>(malloc(sizeof(WebPByteType) * mBufferSize));
+ mBuffer = reinterpret_cast<WebPByteType*>(malloc(sizeof(WebPByteType) * mBufferSize));
+ if(DALI_UNLIKELY(!mBuffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %zu\n", sizeof(WebPByteType) * mBufferSize);
+ return false;
+ }
mBufferSize = fread(mBuffer, sizeof(WebPByteType), mBufferSize, fp);
return true;
}
if(desiredSize.GetWidth() > 0 && desiredSize.GetHeight() > 0)
{
- const int desiredWidth = desiredSize.GetWidth();
+ const int desiredWidth = desiredSize.GetWidth();
const int desiredHeight = desiredSize.GetHeight();
WebPDecoderConfig config;
}
// Apply config for scaling
- config.options.use_scaling = 1;
- config.options.scaled_width = desiredWidth;
+ config.options.use_scaling = 1;
+ config.options.scaled_width = desiredWidth;
config.options.scaled_height = desiredHeight;
if(channelNumber == 4)
if(frameBuffer != nullptr)
{
- Pixel::Format pixelFormat = (channelNumber == 4) ? Pixel::RGBA8888 : Pixel::RGB888;
- int32_t bufferSize = desiredWidth * desiredHeight * Dali::Pixel::GetBytesPerPixel(pixelFormat);
- pixelBuffer = Dali::Devel::PixelBuffer::New(desiredWidth, desiredHeight, pixelFormat);
+ Pixel::Format pixelFormat = (channelNumber == 4) ? Pixel::RGBA8888 : Pixel::RGB888;
+ int32_t bufferSize = desiredWidth * desiredHeight * Dali::Pixel::GetBytesPerPixel(pixelFormat);
+ pixelBuffer = Dali::Devel::PixelBuffer::New(desiredWidth, desiredHeight, pixelFormat);
memcpy(pixelBuffer.GetBuffer(), frameBuffer, bufferSize);
}
{
Pixel::Format pixelFormat = (channelNumber == 4) ? Pixel::RGBA8888 : Pixel::RGB888;
int32_t bufferSize = width * height * Dali::Pixel::GetBytesPerPixel(pixelFormat);
- Internal::Adaptor::PixelBufferPtr internal =
- Internal::Adaptor::PixelBuffer::New(frameBuffer, bufferSize, width, height, width, pixelFormat);
- pixelBuffer = Devel::PixelBuffer(internal.Get());
+ Internal::Adaptor::PixelBufferPtr internal = Internal::Adaptor::PixelBuffer::New(frameBuffer, bufferSize, width, height, width, pixelFormat);
+ pixelBuffer = Devel::PixelBuffer(internal.Get());
}
}
}
BidirectionalInfo* bidirectionalInfo = new BidirectionalInfo();
bidirectionalInfo->characterTypes = reinterpret_cast<FriBidiCharType*>(malloc(numberOfCharacters * sizeof(FriBidiCharType)));
- if(!bidirectionalInfo->characterTypes)
+ if(DALI_UNLIKELY(!bidirectionalInfo->characterTypes))
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %zu\n", numberOfCharacters * sizeof(FriBidiCharType));
delete bidirectionalInfo;
return 0;
}
bidirectionalInfo->embeddedLevels = reinterpret_cast<FriBidiLevel*>(malloc(numberOfCharacters * sizeof(FriBidiLevel)));
- if(!bidirectionalInfo->embeddedLevels)
+ if(DALI_UNLIKELY(!bidirectionalInfo->embeddedLevels))
{
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %zu\n", numberOfCharacters * sizeof(FriBidiLevel));
free(bidirectionalInfo->characterTypes);
delete bidirectionalInfo;
return 0;
bidirectionalInfo->bracketTypes = reinterpret_cast<FriBidiBracketType*>(malloc(numberOfCharacters * sizeof(FriBidiBracketType)));
if(!bidirectionalInfo->bracketTypes)
{
- free(bidirectionalInfo->bracketTypes);
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %zu\n", numberOfCharacters * sizeof(FriBidiBracketType));
+ free(bidirectionalInfo->embeddedLevels);
+ free(bidirectionalInfo->characterTypes);
delete bidirectionalInfo;
return 0;
}
// Retrieve the embedding levels.
if(fribidi_get_par_embedding_levels_ex(bidirectionalInfo->characterTypes, bidirectionalInfo->bracketTypes, numberOfCharacters, &bidirectionalInfo->paragraphDirection, bidirectionalInfo->embeddedLevels) == 0)
{
- free(bidirectionalInfo->characterTypes);
free(bidirectionalInfo->bracketTypes);
+ free(bidirectionalInfo->embeddedLevels);
+ free(bidirectionalInfo->characterTypes);
delete bidirectionalInfo;
return 0;
}
// Copy embedded levels as fribidi_reorder_line() may change them.
const size_t embeddedLevelsSize = static_cast<std::size_t>(numberOfCharacters) * sizeof(FriBidiLevel);
FriBidiLevel* embeddedLevels = reinterpret_cast<FriBidiLevel*>(malloc(embeddedLevelsSize));
- if(embeddedLevels)
+ if(DALI_LIKELY(embeddedLevels))
{
memcpy(embeddedLevels, bidirectionalInfo->embeddedLevels + firstCharacterIndex, embeddedLevelsSize);
// Free resources.
free(embeddedLevels);
}
+ else
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %zu\n", embeddedLevelsSize);
+ }
}
bool GetMirroredText(Character* text,
data.buffer = newBuffer;
data.compressionType = TextAbstraction::GlyphBufferData::CompressionType::NO_COMPRESSION;
}
+ else
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u x %u x %u\n", widthOut, heightOut, pixelSize);
+ }
}
Dali::Internal::Platform::RotateByShear(data.buffer,
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
hyphens = (char*)malloc(wordLength + 5);
- if(hyphens)
+ if(DALI_LIKELY(hyphens))
{
hnj_hyphen_hyphenate2(dict, (char*)(word), wordLength, hyphens, NULL, &rep, &pos, &cut);
free(hyphens);
}
+ else
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", wordLength + 5);
+ }
#endif
return hyphensList;
/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <dali/internal/text/text-abstraction/plugin/font-client-utils.h>
+#include <dali/integration-api/debug.h>
+
namespace Dali::TextAbstraction::Internal
{
void EmbeddedItem::GetGlyphMetrics(GlyphInfo& glyph)
// Creates the output buffer
const uint32_t bufferSize = data.width * data.height * 4u;
data.buffer = (uint8_t*)malloc(bufferSize); // @note The caller is responsible for deallocating the bitmap data using free.
-
- memset(data.buffer, 0u, bufferSize);
+ if(DALI_UNLIKELY(!data.buffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", bufferSize);
+ }
+ else
+ {
+ memset(data.buffer, 0u, bufferSize);
+ }
// Just creates a void buffer. Doesn't matter what pixel format is set as is the application code the responsible of filling it.
}
if(!data.isBufferOwned || data.compressionType != TextAbstraction::GlyphBufferData::CompressionType::NO_COMPRESSION)
{
uint8_t* newBuffer = (uint8_t*)malloc(data.width * data.height * Pixel::GetBytesPerPixel(data.format));
+ if(DALI_UNLIKELY(!newBuffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u x %u x %u\n", data.width, data.height, Pixel::GetBytesPerPixel(data.format));
+ return Dali::PixelData();
+ }
+
TextAbstraction::GlyphBufferData::Decompress(data, newBuffer);
if(data.isBufferOwned)
{
/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
{
data.isBufferOwned = true;
data.buffer = (uint8_t*)malloc(bufferSize); // @note The caller is responsible for deallocating the bitmap data using free.
+
+ if(DALI_UNLIKELY(!data.buffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", bufferSize);
+ return;
+ }
Dali::Internal::Platform::LanczosSample(srcBuffer,
inputDimensions,
srcWidth,
/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
{
glyphData.mIsBitmap = true;
glyphData.mBitmap->buffer = (uint8_t*)malloc(bufferSize * sizeof(uint8_t)); // @note The caller is responsible for deallocating the bitmap data using free.
- memcpy(glyphData.mBitmap->buffer, freeTypeFace->glyph->bitmap.buffer, bufferSize);
+ if(DALI_UNLIKELY(!glyphData.mBitmap->buffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %zu\n", bufferSize * sizeof(uint8_t));
+ delete glyphData.mBitmap;
+ glyphData.mIsBitmap = false;
+ glyphData.mBitmap = nullptr;
+ error = static_cast<FT_Error>(-1);
+ }
+ else
+ {
+ memcpy(glyphData.mBitmap->buffer, freeTypeFace->glyph->bitmap.buffer, bufferSize);
+ }
}
else
{
if(glyphData.mBitmap->pitch == static_cast<int>(glyphData.mBitmap->width))
{
desiredBuffer = (uint8_t*)malloc(desiredWidth * desiredHeight * sizeof(uint8_t)); // @note The caller is responsible for deallocating the bitmap data using free.
- // Resize bitmap here.
- Dali::Internal::Platform::LanczosSample1BPP(glyphData.mBitmap->buffer,
- inputDimensions,
- glyphData.mBitmap->width,
- desiredBuffer,
- desiredDimensions);
+
+ if(DALI_UNLIKELY(!desiredBuffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u x %u x 1\n", desiredWidth, desiredHeight);
+ }
+ else
+ {
+ // Resize bitmap here.
+ Dali::Internal::Platform::LanczosSample1BPP(glyphData.mBitmap->buffer,
+ inputDimensions,
+ glyphData.mBitmap->width,
+ desiredBuffer,
+ desiredDimensions);
+ }
}
break;
}
if(glyphData.mBitmap->pitch == static_cast<int>(glyphData.mBitmap->width << 2u))
{
desiredBuffer = (uint8_t*)malloc((desiredWidth * desiredHeight * sizeof(uint8_t)) << 2u); // @note The caller is responsible for deallocating the bitmap data using free.
- // Resize bitmap here.
- Dali::Internal::Platform::LanczosSample4BPP(glyphData.mBitmap->buffer,
- inputDimensions,
- glyphData.mBitmap->width,
- desiredBuffer,
- desiredDimensions);
+
+ if(DALI_UNLIKELY(!desiredBuffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u x %u x 4\n", desiredWidth, desiredHeight);
+ }
+ else
+ {
+ // Resize bitmap here.
+ Dali::Internal::Platform::LanczosSample4BPP(glyphData.mBitmap->buffer,
+ inputDimensions,
+ glyphData.mBitmap->width,
+ desiredBuffer,
+ desiredDimensions);
+ }
}
break;
}