Automattic/node-canvas

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

Open

#1195 aperta il 2 lug 2018

Vedi su GitHub
 (0 commenti) (0 reazioni) (0 assegnatari)JavaScript (1140 fork)batch import
BugHelp wanted

Metriche repository

Star
 (9524 star)
Metriche merge PR
 (Merge medio 34g 18h) (2 PR mergiate in 30 g)

Descrizione

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

Guida contributor