mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2026-02-25 08:32:56 -05:00
Add checks on the seek return value
This commit is contained in:
@ -1170,7 +1170,9 @@ bool XCFImageFormat::loadLayer(QDataStream &xcf_io, XCFImage &xcf_image)
|
|||||||
if (!composeTiles(xcf_image)) {
|
if (!composeTiles(xcf_image)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
xcf_io.device()->seek(layer.hierarchy_offset);
|
if (!xcf_io.device()->seek(layer.hierarchy_offset)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// As tiles are loaded, they are copied into the layers tiles by
|
// As tiles are loaded, they are copied into the layers tiles by
|
||||||
// this routine. (loadMask(), below, uses a slightly different
|
// this routine. (loadMask(), below, uses a slightly different
|
||||||
@ -1188,7 +1190,9 @@ bool XCFImageFormat::loadLayer(QDataStream &xcf_io, XCFImage &xcf_image)
|
|||||||
layer.apply_mask = 1;
|
layer.apply_mask = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
xcf_io.device()->seek(layer.mask_offset);
|
if (!xcf_io.device()->seek(layer.mask_offset)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!loadMask(xcf_io, layer, xcf_image.header.precision)) {
|
if (!loadMask(xcf_io, layer, xcf_image.header.precision)) {
|
||||||
return false;
|
return false;
|
||||||
@ -1948,12 +1952,15 @@ bool XCFImageFormat::loadHierarchy(QDataStream &xcf_io, Layer &layer, const Gimp
|
|||||||
|
|
||||||
qint64 saved_pos = xcf_io.device()->pos();
|
qint64 saved_pos = xcf_io.device()->pos();
|
||||||
|
|
||||||
xcf_io.device()->seek(offset);
|
if (!xcf_io.device()->seek(offset)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!loadLevel(xcf_io, layer, bpp, precision)) {
|
if (!loadLevel(xcf_io, layer, bpp, precision)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!xcf_io.device()->seek(saved_pos)) {
|
||||||
xcf_io.device()->seek(saved_pos);
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2056,7 +2063,9 @@ bool XCFImageFormat::loadLevel(QDataStream &xcf_io, Layer &layer, qint32 bpp, co
|
|||||||
offset2 = offset + blockSize;
|
offset2 = offset + blockSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
xcf_io.device()->seek(offset);
|
if (!xcf_io.device()->seek(offset)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
qint64 bytesParsed = 0;
|
qint64 bytesParsed = 0;
|
||||||
|
|
||||||
switch (layer.compression) {
|
switch (layer.compression) {
|
||||||
@ -2163,7 +2172,9 @@ bool XCFImageFormat::loadLevel(QDataStream &xcf_io, Layer &layer, qint32 bpp, co
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
xcf_io.device()->seek(saved_pos);
|
if (!xcf_io.device()->seek(saved_pos)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
offset = readOffsetPtr(xcf_io);
|
offset = readOffsetPtr(xcf_io);
|
||||||
|
|
||||||
if (offset < 0) {
|
if (offset < 0) {
|
||||||
@ -2203,7 +2214,9 @@ bool XCFImageFormat::loadMask(QDataStream &xcf_io, Layer &layer, const GimpPreci
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
xcf_io.device()->seek(hierarchy_offset);
|
if (!xcf_io.device()->seek(hierarchy_offset)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
layer.assignBytes = assignMaskBytes;
|
layer.assignBytes = assignMaskBytes;
|
||||||
|
|
||||||
if (!loadHierarchy(xcf_io, layer, precision)) {
|
if (!loadHierarchy(xcf_io, layer, precision)) {
|
||||||
@ -4235,7 +4248,9 @@ bool XCFHandler::canRead(QIODevice *device)
|
|||||||
bool failed = !XCFImageFormat::readXCFHeader(ds, &header);
|
bool failed = !XCFImageFormat::readXCFHeader(ds, &header);
|
||||||
ds.setDevice(nullptr);
|
ds.setDevice(nullptr);
|
||||||
|
|
||||||
device->seek(oldPos);
|
if (!device->seek(oldPos)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (failed) {
|
if (failed) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user