Automattic/node-canvas

Segmentation fault: 11 when rendering SVG with 0 size

Aperta

#1400 aperta il 4 apr 2019

 (2 commenti) (2 reazioni) (0 assegnatari)JavaScript (1195 fork)batch import
BugHelp wanted

Metriche repository

Star
 (10.688 stelle)
Metriche merge PR
 (Merge medio 34g 18h) (2 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