Vm2: La ejecución de una matriz devuelve un objeto extraño. [Node.js 10.xx]

Creado en 7 abr. 2019  ·  10Comentarios  ·  Fuente: patriksimek/vm2

Código como este:

const { VM } = require('vm2')
const vm = new VM()
const res = vm.run('[1, 2, 3]')
console.log(res)

Huellas dactilares:
[ 1, 2, 3, '0': 1, '1': 2, '2': 3 ]
¿Es esto un error o un comportamiento esperado?

La compilación de VM de NodeJS devuelve:
[1, 2, 3]
como se esperaba.

bug confirmed help wanted wontfix

Comentario más útil

Hola @patriksimek , te cito como mantenedor principal. Yo también tengo este problema. Esto sucede con VM y con NodeVM.

En mi caso, dentro del NodeVM tengo un fragmento que -entre otras cosas- hace esto:

const array = [];
array.push({a: 1, b: 2});
console.log(array);

E imprime:

[{a: 1, b: 2}, '0': {a: 1, b: 2}]

La consola en la configuración de NodeVM está configurada en inherit .

¿Tienes alguna pista de lo que podría generar este comportamiento?

Gracias de antemano y lamento molestarme.

Todos 10 comentarios

Hola @patriksimek , te cito como mantenedor principal. Yo también tengo este problema. Esto sucede con VM y con NodeVM.

En mi caso, dentro del NodeVM tengo un fragmento que -entre otras cosas- hace esto:

const array = [];
array.push({a: 1, b: 2});
console.log(array);

E imprime:

[{a: 1, b: 2}, '0': {a: 1, b: 2}]

La consola en la configuración de NodeVM está configurada en inherit .

¿Tienes alguna pista de lo que podría generar este comportamiento?

Gracias de antemano y lamento molestarme.

Este objeto resultó ser un Proxy. Creo que en algún lugar de Decontextify.instance se devuelve un objeto incorrecto.

Produce la salida esperada en el nodo v8.9.3 y el nodo v8.10.0.
El problema se confirma en el nodo v10.14.2

Me encontré con este mismo problema. Frustrante rastrear este error, pensando que estaba en mi propio código. Finalmente decidí probar un ejemplo mínimo y he aquí que vm2 fue el culpable. Parece que el ciclo for of también hace algunas cosas extrañas con las matrices.

Produce la salida esperada en el nodo v8.9.3 y el nodo v8.10.0.
El problema se confirma en el nodo v10.14.2

Lo que puedo proponer es ejecutar un depurador en v.8.10.0 y v10.14.2 y encontrar una línea de código donde la salida sea diferente.

Esto fue causado por el uso de una trampa Proxy.handler.ownKeys (). Este fue un problema en el nodo y parece estar solucionado en v12.

¿Planea alguna alternativa para las versiones anteriores de node?

El problema está solo en el nodo 10. Podríamos hacer una solución, pero eso requeriría verificar el llamador de una función cada vez y para obtener el llamador necesitaríamos generar un seguimiento de pila. Creo que no vale la pena hacer esto.

El problema está solo en el nodo 10. Podríamos hacer una solución, pero eso requeriría verificar el llamador de una función cada vez y para obtener el llamador necesitaríamos generar un seguimiento de pila. Creo que no vale la pena hacer esto.

¿Qué tal una verificación de parámetros de configuración o CLI en su lugar? El código para eso podría ser bastante mínimo.

Añado console a vm._context
vm._context.console = console
vm.run("console.log([1,2,3])")
¡está funcionando correctamente!

¿Fue útil esta página
0 / 5 - 0 calificaciones