Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions docs/src/content/docs/api-resize.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,10 @@ Extract/crop a region of the image.
| Param | Type | Description |
| --- | --- | --- |
| options | <code>Object</code> | describes the region to extract using integral pixel values |
| options.left | <code>number</code> | zero-indexed offset from left edge |
| options.top | <code>number</code> | zero-indexed offset from top edge |
| options.width | <code>number</code> | width of region to extract |
| options.height | <code>number</code> | height of region to extract |
| options.left | <code>number</code> | zero-indexed offset from left edge, an integer between 0 and 100000000 |
| options.top | <code>number</code> | zero-indexed offset from top edge, an integer between 0 and 100000000 |
| options.width | <code>number</code> | width of region to extract, an integer between 0 and 100000000 |
| options.height | <code>number</code> | height of region to extract, an integer between 0 and 100000000 |

**Example**
```js
Expand Down
8 changes: 4 additions & 4 deletions lib/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1598,13 +1598,13 @@ declare namespace sharp {
}

interface Region {
/** zero-indexed offset from left edge */
/** zero-indexed offset from left edge, an integer between 0 and 100000000 */
left: number;
/** zero-indexed offset from top edge */
/** zero-indexed offset from top edge, an integer between 0 and 100000000 */
top: number;
/** dimension of extracted image */
/** dimension of extracted image, an integer between 0 and 100000000 */
width: number;
/** dimension of extracted image */
/** dimension of extracted image, an integer between 0 and 100000000 */
height: number;
}

Expand Down
12 changes: 6 additions & 6 deletions lib/resize.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -471,10 +471,10 @@ function extend (extend) {
* });
*
* @param {Object} options - describes the region to extract using integral pixel values
* @param {number} options.left - zero-indexed offset from left edge
* @param {number} options.top - zero-indexed offset from top edge
* @param {number} options.width - width of region to extract
* @param {number} options.height - height of region to extract
* @param {number} options.left - zero-indexed offset from left edge, an integer between 0 and 100000000
* @param {number} options.top - zero-indexed offset from top edge, an integer between 0 and 100000000
* @param {number} options.width - width of region to extract, an integer between 0 and 100000000
* @param {number} options.height - height of region to extract, an integer between 0 and 100000000
* @returns {Sharp}
* @throws {Error} Invalid parameters
*/
Expand All @@ -485,10 +485,10 @@ function extract (options) {
}
['left', 'top', 'width', 'height'].forEach(function (name) {
const value = options[name];
if (is.integer(value) && value >= 0) {
if (is.integer(value) && is.inRange(value, 0, 100000000)) {
this.options[name + (name === 'left' || name === 'top' ? 'Offset' : '') + suffix] = value;
} else {
throw is.invalidParameterError(name, 'integer', value);
throw is.invalidParameterError(name, 'integer between 0 and 100000000', value);
}
}, this);
// Ensure existing rotation occurs before pre-resize extraction
Expand Down
14 changes: 14 additions & 0 deletions test/unit/extract.js
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,20 @@ suite('Partial image extraction', () => {
});
});

test('Oversized width', (t) => {
t.plan(1);
t.assert.throws(() => {
sharp(fixtures.inputJpg).extract({ left: 10, top: 10, width: 100000001, height: 10 });
}, /Expected integer between 0 and 100000000 for width but received 100000001 of type number/);
});

test('Oversized left', (t) => {
t.plan(1);
t.assert.throws(() => {
sharp(fixtures.inputJpg).extract({ left: 2 ** 31, top: 10, width: 10, height: 10 });
}, /Expected integer between 0 and 100000000 for left but received 2147483648 of type number/);
});

test('Bad image area', async (t) => {
t.plan(1);
t.assert.rejects(
Expand Down