Automattic/node-canvas

Segmentation fault: 11 when rendering SVG with 0 size

Ouverte

#1 400 ouverte le 4 avr. 2019

 (2 commentaires) (2 réactions) (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

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

Guide contributeur