diff --git a/index.js b/index.js index 123488d8..7a817d19 100755 --- a/index.js +++ b/index.js @@ -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 diff --git a/test/unit/io.js b/test/unit/io.js index 20ef2c3e..328ad017 100755 --- a/test/unit/io.js +++ b/test/unit/io.js @@ -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) { diff --git a/test/unit/metadata.js b/test/unit/metadata.js index e9d7edf4..36ad3bbd 100755 --- a/test/unit/metadata.js +++ b/test/unit/metadata.js @@ -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(); - }); - }); });