Ensure image >= 3x3 before attempting trim operation

See https://github.com/libvips/libvips/issues/1392
This commit is contained in:
Lovell Fuller 2019-08-13 21:34:36 +01:00
parent 23b2e541ab
commit 3fa91bb4ce
3 changed files with 26 additions and 0 deletions

View File

@ -13,6 +13,8 @@ Requires libvips v8.8.1.
[#1834](https://github.com/lovell/sharp/pull/1834)
[@jaubourg](https://github.com/jaubourg)
* Ensure image is at least 3x3 pixels before attempting trim operation.
#### v0.23.0 - 29<sup>th</sup> July 2019
* Remove `overlayWith` previously deprecated in v0.22.0.

View File

@ -250,6 +250,9 @@ namespace sharp {
Trim an image
*/
VImage Trim(VImage image, double const threshold) {
if (image.width() < 3 && image.height() < 3) {
throw VError("Image to trim must be at least 3x3 pixels");
}
// Top-left pixel provides the background colour
VImage background = image.extract_area(0, 0, 1, 1);
if (HasAlpha(background)) {

View File

@ -58,6 +58,27 @@ describe('Trim borders', function () {
});
});
it('Attempt to trim 2x2 pixel image fails', function (done) {
sharp({
create: {
width: 2,
height: 2,
channels: 3,
background: 'red'
}
})
.trim()
.toBuffer()
.then(() => {
done(new Error('Expected an error'));
})
.catch(err => {
assert.strictEqual('Image to trim must be at least 3x3 pixels', err.message);
done();
})
.catch(done);
});
describe('Invalid thresholds', function () {
[-1, 'fail', {}].forEach(function (threshold) {
it(JSON.stringify(threshold), function () {