diff --git a/src/Image.cc b/src/Image.cc index 4821aeeb8..4c8ab5a8b 100644 --- a/src/Image.cc +++ b/src/Image.cc @@ -177,6 +177,8 @@ NAN_SETTER(Image::SetSource) { uint8_t *buf = (uint8_t *) Buffer::Data(value->ToObject()); unsigned len = Buffer::Length(value->ToObject()); status = img->loadFromBuffer(buf, len); + } else if (value->IsNull()) { + status = CAIRO_STATUS_INVALID_CONTENT; } // check status diff --git a/test/image.test.js b/test/image.test.js index 0c3b18766..909e1a0b6 100644 --- a/test/image.test.js +++ b/test/image.test.js @@ -35,6 +35,29 @@ describe('Image', function () { assert.strictEqual(320, img.height); }); + it('Image#onerror src=null', function() { + var img = new Image + , n = 0 + , error; + + + img.onload = function() { + assert.fail('called onload'); + }; + + img.onerror = function(err) { + error = err; + ++n; + }; + + img.src = null; + + assert.ok(error instanceof Error, 'did not invoke onerror() with error'); + assert.strictEqual(error.message, 'invalid value for an input cairo_content_t'); + assert.strictEqual(img.complete, false); + assert.equal(n, 1); + }); + it('Image#onerror', function () { var img = new Image , error