Automattic/node-canvas

Segmentation fault: 11 when rendering SVG with 0 size

Open

#1400 opened on Apr 4, 2019

View on GitHub
 (2 comments) (2 reactions) (0 assignees)JavaScript (9,524 stars) (1,140 forks)batch import
BugHelp wanted

Description

Issue or Feature

Issue: a Segmentation fault is thrown when the canvas size is 0x0 and the width and height passed to drawImage() are also 0.

Why would I do this? Well not deliberately! Another component was passing in the size of the canvas as a string, instead of a number. But because node was SegFaulting, it was hard to trace back to what was going wrong.

Steps to Reproduce

const fs = require('fs')
const { createCanvas, loadImage } = require('canvas')

let canvas = createCanvas('600', '600')
let ctx = canvas.getContext('2d')

console.log('canvas.width: ' + canvas.width)
console.log('canvas.height: ' + canvas.height)
ctx.fillStyle = '#FF0000'
ctx.fillRect(0, 0, canvas.width, canvas.height)

const promise = loadImage('Ghostscript_Tiger.svg')
promise.then((image) => {
  // Scale the SVG to fit the canvas
  image.width = canvas.width
  image.height = canvas.height
  console.log('image.width: ' + image.width)
  console.log('image.height: ' + image.height)

  ctx.drawImage(
    image,
    0, 0,
    image.width, image.height
  )
}).then(() => {
  const out = fs.createWriteStream('Ghostscript_Tiger-600.png')
  const stream = canvas.createPNGStream()
  stream.pipe(out)
  out.on('finish', () => console.log('Finished'))
})

Your Environment

  • Version of node-canvas: 2.4.1
  • Version of node: v8.12.0
  • Version of cairo: 1.16.0
  • Version of Mac OS: 10.12.6

Contributor guide