createImageData() with negative width and height aborts the process
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 76/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- javascript, node.js
Línea de trabajo
Empieza leyendo Context2d::CreateImageData, mencionado en el issue, y sigue cómo convierte el ancho y el alto antes de asignar el búfer. Compara el comportamiento con la especificación de Canvas citada y reproduce los dos casos de tamaños negativos del script proporcionado. La tarea estará terminada cuando ambos devuelvan dimensiones positivas sin lanzar una excepción ni abortar; añade o ejecuta pruebas específicas para esos casos.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Version of node-canvas
v3.2.3, v4.0.0-rc3 (master 6cc138b)
Version of node
v26.13.0
What operating system does the problem occur on?
Linux
Steps to reproduce
ctx.createImageData(sw, sh) should use the absolute values of sw and sh. In node-canvas a negative size is read as a huge unsigned number: one negative argument throws, and two negative arguments abort Node with a fatal out-of-memory error that cannot be caught.
const { createCanvas } = require('canvas');
const ctx = createCanvas(10, 10).getContext('2d');
try { const d = ctx.createImageData(-3, 2); console.log(d.width, d.height); } catch (e) { console.log('threw:', e.message); }
const d = ctx.createImageData(-3, -2);
console.log(d.width, d.height);
Run node repro.js; echo $?:
Actual:
threw: buffer exceeds 2147483647 bytes
FATAL ERROR: v8::ArrayBuffer::New Allocation failed - process out of memory
...
134
Expected (matches Chrome 153):
3 2
3 2
Additional information/comments
Per https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-createimagedata, createImageData(sw, sh) must initialize the ImageData object with the absolute magnitude of sw and sh. In Context2d::CreateImageData, the arguments are converted with Uint32Value(), turning -3 into 4294967293; with two negative values Bpp * width * height overflows int64_t, bypasses the nBytes > INT32_MAX check, and passes a negative nBytes to Napi::ArrayBuffer::New.
Credit: https://ucsbplse.github.io/
- Lenguaje dominante
- JavaScript
- Estrellas
- 10.7k
- Forks
- 1.2k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Automattic/node-canvas
-
Feature Text & Fonts
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
Automattic/node-canvas#2364 · 3 comentarios · 2 reacciones ·
-
Feature
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
Automattic/node-canvas#2621 ·
-
actualBoundingBoxLeft has the sign inverted relative to canvas's own rasteriser (3.2.0, 3.2.3)Posiblemente ocupada @florianaltendorfer la tomó hace 13 días. AbiertoBug
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
Automattic/node-canvas#2620 · 1 comentario ·
-
Bug
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Automattic/node-canvas#2619 · 1 comentario ·
-
The PDF file created by createPDFStream becomes larger in size, and createWriteStream is very slowAbiertoBug performance
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Automattic/node-canvas#2615 · 2 comentarios ·
Todos los issues de Automattic/node-canvas
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
capricorn86/happy-dom#2594 ·
Los mantenedores suelen responder en 1 día
-
Decoding tag 1 (epoch date) with an 8-byte integer throws "Cannot mix BigInt and other types"Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
microsoft/monaco-editor#5575 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 1 día
-
Shrinking an array with `length =` and growing it back loses the patches for the truncated indicesPosiblemente ocupada @RClaudiuM la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 4 días