mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 18:40:16 +02:00
Limit HEIF output dimensions to 16384x16384
This is a slightly breaking change to sync with the behaviour of a forthcoming libvips patch release. It also matches the libavif limit. Having an arbitrary limit is safer than no limit.
This commit is contained in:
parent
d2f0fa855b
commit
5522060e9e
@ -6,6 +6,8 @@ Requires libvips v8.14.2
|
|||||||
|
|
||||||
### v0.32.2 - TBD
|
### v0.32.2 - TBD
|
||||||
|
|
||||||
|
* Limit HEIF output dimensions to 16384x16384, matches libvips.
|
||||||
|
|
||||||
* Ensure exceptions are not thrown when terminating.
|
* Ensure exceptions are not thrown when terminating.
|
||||||
[#3569](https://github.com/lovell/sharp/issues/3569)
|
[#3569](https://github.com/lovell/sharp/issues/3569)
|
||||||
|
|
||||||
|
@ -669,6 +669,10 @@ namespace sharp {
|
|||||||
if (image.width() > 65535 || height > 65535) {
|
if (image.width() > 65535 || height > 65535) {
|
||||||
throw vips::VError("Processed image is too large for the GIF format");
|
throw vips::VError("Processed image is too large for the GIF format");
|
||||||
}
|
}
|
||||||
|
} else if (imageType == ImageType::HEIF) {
|
||||||
|
if (image.width() > 16384 || height > 16384) {
|
||||||
|
throw vips::VError("Processed image is too large for the HEIF format");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -941,6 +941,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|||||||
} else if (baton->formatOut == "heif" ||
|
} else if (baton->formatOut == "heif" ||
|
||||||
(baton->formatOut == "input" && inputImageType == sharp::ImageType::HEIF)) {
|
(baton->formatOut == "input" && inputImageType == sharp::ImageType::HEIF)) {
|
||||||
// Write HEIF to buffer
|
// Write HEIF to buffer
|
||||||
|
sharp::AssertImageTypeDimensions(image, sharp::ImageType::HEIF);
|
||||||
image = sharp::RemoveAnimationProperties(image).cast(VIPS_FORMAT_UCHAR);
|
image = sharp::RemoveAnimationProperties(image).cast(VIPS_FORMAT_UCHAR);
|
||||||
VipsArea *area = reinterpret_cast<VipsArea*>(image.heifsave_buffer(VImage::option()
|
VipsArea *area = reinterpret_cast<VipsArea*>(image.heifsave_buffer(VImage::option()
|
||||||
->set("strip", !baton->withMetadata)
|
->set("strip", !baton->withMetadata)
|
||||||
@ -1130,6 +1131,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|||||||
} else if (baton->formatOut == "heif" || (mightMatchInput && isHeif) ||
|
} else if (baton->formatOut == "heif" || (mightMatchInput && isHeif) ||
|
||||||
(willMatchInput && inputImageType == sharp::ImageType::HEIF)) {
|
(willMatchInput && inputImageType == sharp::ImageType::HEIF)) {
|
||||||
// Write HEIF to file
|
// Write HEIF to file
|
||||||
|
sharp::AssertImageTypeDimensions(image, sharp::ImageType::HEIF);
|
||||||
image = sharp::RemoveAnimationProperties(image).cast(VIPS_FORMAT_UCHAR);
|
image = sharp::RemoveAnimationProperties(image).cast(VIPS_FORMAT_UCHAR);
|
||||||
image.heifsave(const_cast<char*>(baton->fileOut.data()), VImage::option()
|
image.heifsave(const_cast<char*>(baton->fileOut.data()), VImage::option()
|
||||||
->set("strip", !baton->withMetadata)
|
->set("strip", !baton->withMetadata)
|
||||||
|
@ -130,4 +130,18 @@ describe('AVIF', () => {
|
|||||||
width: 32
|
width: 32
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Invalid width - too large', async () =>
|
||||||
|
assert.rejects(
|
||||||
|
() => sharp({ create: { width: 16385, height: 16, channels: 3, background: 'red' } }).avif().toBuffer(),
|
||||||
|
/Processed image is too large for the HEIF format/
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
it('Invalid height - too large', async () =>
|
||||||
|
assert.rejects(
|
||||||
|
() => sharp({ create: { width: 16, height: 16385, channels: 3, background: 'red' } }).avif().toBuffer(),
|
||||||
|
/Processed image is too large for the HEIF format/
|
||||||
|
)
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user