diff --git a/docs/src/content/docs/api-output.md b/docs/src/content/docs/api-output.md index f41ac47a8..fb489812c 100644 --- a/docs/src/content/docs/api-output.md +++ b/docs/src/content/docs/api-output.md @@ -158,7 +158,7 @@ Set output density (DPI) in EXIF metadata. | Param | Type | Description | | --- | --- | --- | -| density | number | Number of pixels per inch (DPI). | +| density | number | Number of pixels per inch (DPI), between 1 and 100000. | **Example** ```js @@ -435,7 +435,7 @@ Allows orientation and density to be set or updated. | --- | --- | --- | | [options] | Object | | | [options.orientation] | number | Used to update the EXIF `Orientation` tag, integer between 1 and 8. | -| [options.density] | number | Number of pixels per inch (DPI). | +| [options.density] | number | Number of pixels per inch (DPI), between 1 and 100000. | **Example** ```js diff --git a/lib/output.mjs b/lib/output.mjs index b28afd795..a5ec90cdb 100644 --- a/lib/output.mjs +++ b/lib/output.mjs @@ -205,15 +205,15 @@ function toUint8Array () { * .withDensity(96) * .toBuffer(); * - * @param {number} density Number of pixels per inch (DPI). + * @param {number} density Number of pixels per inch (DPI), between 1 and 100000. * @returns {Sharp} * @throws {Error} Invalid parameters */ function withDensity (density) { - if (is.number(density) && density > 0) { + if (is.number(density) && is.inRange(density, 1, 100000)) { this.options.withMetadataDensity = density; } else { - throw is.invalidParameterError('density', 'positive number', density); + throw is.invalidParameterError('density', 'number between 1 and 100000', density); } return this.keepExif(); } @@ -520,7 +520,7 @@ function keepMetadata () { * * @param {Object} [options] * @param {number} [options.orientation] Used to update the EXIF `Orientation` tag, integer between 1 and 8. - * @param {number} [options.density] Number of pixels per inch (DPI). + * @param {number} [options.density] Number of pixels per inch (DPI), between 1 and 100000. * @returns {Sharp} * @throws {Error} Invalid parameters */ @@ -536,10 +536,10 @@ function withMetadata (options) { } } if (is.defined(options.density)) { - if (is.number(options.density) && options.density > 0) { + if (is.number(options.density) && is.inRange(options.density, 1, 100000)) { this.options.withMetadataDensity = options.density; } else { - throw is.invalidParameterError('density', 'positive number', options.density); + throw is.invalidParameterError('density', 'number between 1 and 100000', options.density); } } if (is.defined(options.icc)) { diff --git a/test/unit/metadata.js b/test/unit/metadata.js index 903a9b79c..7dd3a0ec4 100644 --- a/test/unit/metadata.js +++ b/test/unit/metadata.js @@ -1774,6 +1774,10 @@ suite('Image metadata', () => { t.plan(1); t.assert.throws(() => sharp().withMetadata({ density: -1 })); }); + test('Out of range density', (t) => { + t.plan(1); + t.assert.throws(() => sharp().withMetadata({ density: 100001 }), /Expected number between 1 and 100000 for density but received 100001 of type number/); + }); test('Non string icc', (t) => { t.plan(1); t.assert.throws(() => sharp().withMetadata({ icc: true })); @@ -1804,11 +1808,15 @@ suite('Image metadata', () => { }); test('withDensity missing density', (t) => { t.plan(1); - t.assert.throws(() => sharp().withDensity(), /Expected positive number for density but received undefined of type undefined/); + t.assert.throws(() => sharp().withDensity(), /Expected number between 1 and 100000 for density but received undefined of type undefined/); }); test('withDensity invalid density', (t) => { t.plan(1); - t.assert.throws(() => sharp().withDensity('invalid'), /Expected positive number for density but received invalid of type string/); + t.assert.throws(() => sharp().withDensity('invalid'), /Expected number between 1 and 100000 for density but received invalid of type string/); + }); + test('withDensity out of range density', (t) => { + t.plan(1); + t.assert.throws(() => sharp().withDensity(100001), /Expected number between 1 and 100000 for density but received 100001 of type number/); }); }); }); \ No newline at end of file