Guard heif bitdepth property for prebuilt binaries

This commit is contained in:
Lovell Fuller 2024-03-21 18:33:57 +00:00
parent 3c26080c39
commit aa1bbcb5c1
2 changed files with 11 additions and 0 deletions

View File

@ -1011,6 +1011,7 @@ function tiff (options) {
* Use these AVIF options for output image. * Use these AVIF options for output image.
* *
* AVIF image sequences are not supported. * AVIF image sequences are not supported.
* Prebuilt binaries support a bitdepth of 8 only.
* *
* @example * @example
* const data = await sharp(input) * const data = await sharp(input)
@ -1097,6 +1098,9 @@ function heif (options) {
} }
if (is.defined(options.bitdepth)) { if (is.defined(options.bitdepth)) {
if (is.integer(options.bitdepth) && is.inArray(options.bitdepth, [8, 10, 12])) { if (is.integer(options.bitdepth) && is.inArray(options.bitdepth, [8, 10, 12])) {
if (options.bitdepth !== 8 && this.constructor.versions.heif) {
throw is.invalidParameterError('bitdepth when using prebuilt binaries', 8, options.bitdepth);
}
this.options.heifBitdepth = options.bitdepth; this.options.heifBitdepth = options.bitdepth;
} else { } else {
throw is.invalidParameterError('bitdepth', '8, 10 or 12', options.bitdepth); throw is.invalidParameterError('bitdepth', '8, 10 or 12', options.bitdepth);

View File

@ -79,9 +79,16 @@ describe('HEIF', () => {
}); });
}); });
it('valid bitdepth value does not throw an error', () => { it('valid bitdepth value does not throw an error', () => {
const { heif } = sharp.versions;
delete sharp.versions.heif;
assert.doesNotThrow(() => { assert.doesNotThrow(() => {
sharp().heif({ compression: 'av1', bitdepth: 12 }); sharp().heif({ compression: 'av1', bitdepth: 12 });
}); });
sharp.versions.heif = '1.2.3';
assert.throws(() => {
sharp().heif({ compression: 'av1', bitdepth: 10 });
}, /Error: Expected 8 for bitdepth when using prebuilt binaries but received 10 of type number/);
sharp.versions.heif = heif;
}); });
it('invalid bitdepth value should throw an error', () => { it('invalid bitdepth value should throw an error', () => {
assert.throws(() => { assert.throws(() => {