Automattic/node-canvas

Segmentation fault: 11 when rendering SVG with 0 size

Open

#1.400 aberto em 4 de abr. de 2019

Ver no GitHub
 (2 comments) (2 reactions) (0 assignees)JavaScript (1.140 forks)batch import
BugHelp wanted

Métricas do repositório

Stars
 (9.524 stars)
Métricas de merge de PR
 (Mesclagem média 34d 18h) (2 fundiu PRs em 30d)

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

Guia do colaborador