Skip to content

Commit 95eb35e

Browse files
committed
Merge pull request #750 from LinusU/lu-fix-749
Fix segfault in putImageData
2 parents d18713a + 21dd24c commit 95eb35e

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/CanvasRenderingContext2d.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,8 @@ NAN_METHOD(Context2d::AddPage) {
571571
*/
572572

573573
NAN_METHOD(Context2d::PutImageData) {
574+
if (!info[0]->IsObject())
575+
return Nan::ThrowTypeError("ImageData expected");
574576
Local<Object> obj = info[0]->ToObject();
575577
if (!Nan::New(ImageData::constructor)->HasInstance(obj))
576578
return Nan::ThrowTypeError("ImageData expected");

test/canvas.test.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,44 @@ describe('Canvas', function () {
746746
assert.equal(255, imageData.data[i+3]);
747747
});
748748

749+
it('Context2d#getImageData()', function () {
750+
var canvas = new Canvas(1, 1)
751+
, ctx = canvas.getContext('2d');
752+
753+
assert.throws(function () { ctx.getImageData(0, 0, 0, 0); }, /IndexSizeError/);
754+
755+
ctx.fillStyle = '#f00';
756+
ctx.fillRect(0, 0, 1, 1);
757+
758+
var pixel = ctx.getImageData(0, 0, 1, 1);
759+
760+
assert.equal(pixel.data[0], 255);
761+
assert.equal(pixel.data[1], 0);
762+
assert.equal(pixel.data[2], 0);
763+
assert.equal(pixel.data[3], 255);
764+
});
765+
766+
it('Context2d#putImageData()', function () {
767+
var canvas = new Canvas(2, 1)
768+
, ctx = canvas.getContext('2d');
769+
770+
assert.throws(function () { ctx.putImageData({}, 0, 0); }, TypeError);
771+
assert.throws(function () { ctx.putImageData(undefined, 0, 0); }, TypeError);
772+
773+
ctx.fillStyle = '#f00';
774+
ctx.fillRect(0, 0, 1, 1);
775+
776+
// Copy left pixel to the right pixel
777+
ctx.putImageData(ctx.getImageData(0, 0, 1, 1), 1, 0);
778+
779+
var pixel = ctx.getImageData(1, 0, 1, 1);
780+
781+
assert.equal(pixel.data[0], 255);
782+
assert.equal(pixel.data[1], 0);
783+
assert.equal(pixel.data[2], 0);
784+
assert.equal(pixel.data[3], 255);
785+
});
786+
749787
it('Canvas#createSyncPNGStream()', function (done) {
750788
var canvas = new Canvas(20, 20);
751789
var stream = canvas.createSyncPNGStream();

0 commit comments

Comments
 (0)