diff --git a/src/CanvasRenderingContext2d.cc b/src/CanvasRenderingContext2d.cc index c89d738d1..62c901413 100644 --- a/src/CanvasRenderingContext2d.cc +++ b/src/CanvasRenderingContext2d.cc @@ -2460,7 +2460,10 @@ NAN_SETTER(Context2d::SetFont) { MaybeLocal mparsed = _parseFont.Get(iso)->Call(ctx, ctx->Global(), argc, argv); if (mparsed.IsEmpty()) return; - MaybeLocal mfont = Nan::To(mparsed.ToLocalChecked()); + Local mparsedChecked = mparsed.ToLocalChecked(); + // parseFont returns undefined for invalid CSS font strings + if (mparsedChecked->IsUndefined()) return; + MaybeLocal mfont = Nan::To(mparsedChecked); if (mfont.IsEmpty()) return; Local font = mfont.ToLocalChecked(); diff --git a/test/canvas.test.js b/test/canvas.test.js index 977f29696..e3a8757f2 100644 --- a/test/canvas.test.js +++ b/test/canvas.test.js @@ -93,10 +93,7 @@ describe('Canvas', function () { assert.deepEqual(actual, expected, 'Failed to parse: ' + str); } - assert.throws(() => { - const ctx = createCanvas(10, 10).getContext('2d') - ctx.font = 'bold undefinedpx Arial' - }) + assert.strictEqual(parseFont('Helvetica, sans'), undefined) }); it('registerFont', function () { @@ -417,12 +414,15 @@ describe('Canvas', function () { }); it('Context2d#font=', function () { - var canvas = createCanvas(200, 200) - , ctx = canvas.getContext('2d'); + const canvas = createCanvas(200, 200) + const ctx = canvas.getContext('2d') + + assert.equal(ctx.font, '10px sans-serif') + ctx.font = '15px Arial, sans-serif' + assert.equal(ctx.font, '15px Arial, sans-serif') - assert.equal('10px sans-serif', ctx.font); - ctx.font = '15px Arial, sans-serif'; - assert.equal('15px Arial, sans-serif', ctx.font); + ctx.font = 'Helvetica, sans' // invalid + assert.equal(ctx.font, '15px Arial, sans-serif') }); it('Context2d#lineWidth=', function () {