Automattic/node-canvas

Segmentation fault: 11 when rendering SVG with 0 size

Open

#1400 aperta il 4 apr 2019

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

Metriche repository

Star
 (9524 star)
Metriche merge PR
 (Merge medio 47m) (6 PR mergiate in 30 g)

Descrizione

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

Guida contributor