mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2026-07-01 16:49:11 -04:00
allocationLimit = 0 means no limit
This commit is contained in:
@@ -352,11 +352,15 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OpenJPEG uses a shadow copy @32-bit/channel so we need to do a check
|
// OpenJPEG uses a shadow copy @32-bit/channel so we need to do a check
|
||||||
auto maxBytes = qint64(QImageReader::allocationLimit()) * 1024 * 1024;
|
const int allocationLimit = QImageReader::allocationLimit();
|
||||||
auto neededBytes = qint64(width) * height * nchannels * 4;
|
if (allocationLimit > 0) {
|
||||||
if (maxBytes > 0 && neededBytes > maxBytes) {
|
auto maxBytes = qint64(allocationLimit) * 1024 * 1024;
|
||||||
qCCritical(LOG_JP2PLUGIN) << "Allocation limit set to" << (maxBytes / 1024 / 1024) << "MiB but" << (neededBytes / 1024 / 1024) << "MiB are needed!";
|
auto neededBytes = qint64(width) * height * nchannels * 4;
|
||||||
return false;
|
if (maxBytes > 0 && neededBytes > maxBytes) {
|
||||||
|
qCCritical(LOG_JP2PLUGIN) << "Allocation limit set to" << (maxBytes / 1024 / 1024) << "MiB but" << (neededBytes / 1024 / 1024)
|
||||||
|
<< "MiB are needed!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -1389,10 +1389,13 @@ bool XCFImageFormat::composeTiles(XCFImage &xcf_image)
|
|||||||
// tiles of 64x64 pixels. The required memory to build the image is at least doubled because tiles are loaded
|
// tiles of 64x64 pixels. The required memory to build the image is at least doubled because tiles are loaded
|
||||||
// and then the final image is created by copying the tiles inside it.
|
// and then the final image is created by copying the tiles inside it.
|
||||||
// NOTE: on Windows to open a 10GiB image the plugin uses 28GiB of RAM
|
// NOTE: on Windows to open a 10GiB image the plugin uses 28GiB of RAM
|
||||||
qint64 channels = 1 + (layer.type == RGB_GIMAGE ? 2 : 0) + (layer.type == RGBA_GIMAGE ? 3 : 0);
|
const qint64 channels = 1 + (layer.type == RGB_GIMAGE ? 2 : 0) + (layer.type == RGBA_GIMAGE ? 3 : 0);
|
||||||
if (qint64(layer.width) * qint64(layer.height) * channels * 2ll / 1024ll / 1024ll > QImageReader::allocationLimit()) {
|
const int allocationLimit = QImageReader::allocationLimit();
|
||||||
qCDebug(XCFPLUGIN) << "Rejecting image as it exceeds the current allocation limit of" << QImageReader::allocationLimit() << "megabytes";
|
if (allocationLimit > 0) {
|
||||||
return false;
|
if (qint64(layer.width) * qint64(layer.height) * channels * 2ll / 1024ll / 1024ll > allocationLimit) {
|
||||||
|
qCDebug(XCFPLUGIN) << "Rejecting image as it exceeds the current allocation limit of" << allocationLimit << "megabytes";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user