Automattic/node-canvas

Assertion failure when drawing after calling canvas.toBuffer() for PDF or SVG canvas

Ouverte

#1 195 ouverte le 2 juil. 2018

 (0 commentaire) (0 réaction) (0 personne assignée)JavaScript (1 195 forks)batch import
BugHelp wanted

Métriques du dépôt

Stars
 (10 689 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

Description

Steps to Reproduce

const canvas = createCanvas(200,200,"svg")
const ctx = canvas.getContext("2d");
canvas.toBuffer()
ctx.fillRect(10,10,100,100) 
canvas.toBuffer()

results in

File: cairo-surface.c, Line 385

Expression: ! surface->finished

toBuffer has a call to cairo_surface_finish. After calling cairo_surface_finish() the only valid operations on a surface are getting and setting user, referencing and destroying, and flushing and finishing it.

We should at least catch that failure so the process doesn't crash. I don't see a way to actually let the canvas continue to be usable for drawing though. (Thought there might be an easy way to copy the content, but not seeing one.)

Your Environment

  • Version of node-canvas (e.g. 1.4.0): master @ b10d204
  • Environment (e.g. node 4.2.0 on Mac OS X 10.8): node 8.x, Win10 x64

Guide contributeur