From 498f6763df35c52ad9a5ee42f1545fcb20426a85 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 13 Dec 2018 03:37:48 +0100 Subject: [PATCH] Catch font errors --- src/CanvasRenderingContext2d.cc | 8 ++++++-- test/canvas.test.js | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/CanvasRenderingContext2d.cc b/src/CanvasRenderingContext2d.cc index 400ecd526..8e33a4697 100644 --- a/src/CanvasRenderingContext2d.cc +++ b/src/CanvasRenderingContext2d.cc @@ -2451,8 +2451,12 @@ NAN_SETTER(Context2d::SetFont) { const int argc = 1; Local argv[argc] = { value }; - Local parsed = _parseFont.Get(iso)->Call(ctx, ctx->Global(), argc, argv).ToLocalChecked(); - Local font = Nan::To(parsed).ToLocalChecked(); + + MaybeLocal mparsed = _parseFont.Get(iso)->Call(ctx, ctx->Global(), argc, argv); + if (mparsed.IsEmpty()) return; + MaybeLocal mfont = Nan::To(mparsed.ToLocalChecked()); + if (mfont.IsEmpty()) return; + Local font = mfont.ToLocalChecked(); Nan::Utf8String weight(font->Get(ctx, Nan::New("weight").ToLocalChecked()).ToLocalChecked()); Nan::Utf8String style(font->Get(ctx, Nan::New("style").ToLocalChecked()).ToLocalChecked()); diff --git a/test/canvas.test.js b/test/canvas.test.js index 41e35eeb2..977f29696 100644 --- a/test/canvas.test.js +++ b/test/canvas.test.js @@ -92,6 +92,11 @@ 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' + }) }); it('registerFont', function () {