Fail fast for Buffer with unsupported format #105

This commit is contained in:
Lovell Fuller 2014-10-28 10:53:11 +00:00
parent 2e61839387
commit a472adeb74
3 changed files with 22 additions and 19 deletions

View File

@ -54,10 +54,15 @@ var Sharp = function(input) {
this.options.fileIn = input;
} else if (typeof input === 'object' && input instanceof Buffer) {
// input=buffer
if (input.length > 0) {
if (
(input.length > 1) &&
(input[0] === 0xff && input[1] === 0xd8) || // JPEG
(input[0] === 0x89 && input[1] === 0x50) || // PNG
(input[0] === 0x52 && input[1] === 0x49) // WebP
) {
this.options.bufferIn = input;
} else {
throw new Error('Buffer is empty');
throw new Error('Buffer contains an unsupported image format. JPEG, PNG and WebP are currently supported.');
}
} else {
// input=stream

View File

@ -189,22 +189,27 @@ describe('Input/output', function() {
});
it('Fail when input is empty Buffer', function(done) {
var fail = false;
var failed = true;
try {
sharp(new Buffer(0));
fail = true;
} catch (e) {}
assert(!fail);
failed = false;
} catch (err) {
assert(err instanceof Error);
}
assert(failed);
done();
});
it('Fail when input is invalid Buffer', function(done) {
sharp(new Buffer([0x1, 0x2, 0x3, 0x4]))
.toBuffer(function (err) {
assert.ok(err);
assert.ok(err instanceof Error);
done();
});
var failed = true;
try {
sharp(new Buffer([0x1, 0x2, 0x3, 0x4]));
failed = false;
} catch (err) {
assert(err instanceof Error);
}
assert(failed);
done();
});
it('Promises/A+', function(done) {

View File

@ -185,11 +185,4 @@ describe('Image metadata', function() {
});
});
it('Report an invalid image as an error', function(done) {
sharp(new Buffer([0x1, 0x2, 0x3, 0x4])).metadata(function (err, metadata) {
assert.ok(err);
assert.ok(err instanceof Error);
done();
});
});
});