Ensure alignment of image-data
Instead of relying on the return value of malloc having the correct alignment, use proper non-throwing new[] operators. Change-Id: I06c6c619e21c848f3d184bdb7cef8c5589c1c7ab Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
d8962144b4
commit
ae8389e19c
@ -149,7 +149,10 @@ QImageData * QImageData::create(const QSize &size, QImage::Format format)
|
||||
|
||||
d->bytes_per_line = params.bytesPerLine;
|
||||
d->nbytes = params.totalSize;
|
||||
d->data = (uchar *)malloc(d->nbytes);
|
||||
if (depth == 64)
|
||||
d->data = (uchar *)new (std::nothrow) quint64[d->nbytes / sizeof(quint64)];
|
||||
else // nbytes is known to already be a multipla of 4:
|
||||
d->data = (uchar *)new (std::nothrow) quint32[d->nbytes / sizeof(quint32)];
|
||||
|
||||
if (!d->data)
|
||||
return nullptr;
|
||||
@ -165,8 +168,13 @@ QImageData::~QImageData()
|
||||
if (is_cached)
|
||||
QImagePixmapCleanupHooks::executeImageHooks((((qint64) ser_no) << 32) | ((qint64) detach_no));
|
||||
delete paintEngine;
|
||||
if (data && own_data)
|
||||
free(data);
|
||||
if (data && own_data) {
|
||||
// Casting to avoid being theoretically UB:
|
||||
if (depth == 64)
|
||||
delete[] (quint64 *)data;
|
||||
else
|
||||
delete[] (quint32 *)data;
|
||||
}
|
||||
data = 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user