Vm2: L'exécution d'un tableau renvoie un objet bizarre. [Node.js 10.xx]

Créé le 7 avr. 2019  ·  10Commentaires  ·  Source: patriksimek/vm2

Code comme celui-ci:

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

Impressions:
[ 1, 2, 3, '0': 1, '1': 2, '2': 3 ]
Est-ce un bug ou un comportement attendu?

La construction de NodeJS dans la VM renvoie:
[1, 2, 3]
comme prévu.

bug confirmed help wanted wontfix

Commentaire le plus utile

Salut @patriksimek , je vous cite en tant que responsable principal. J'ai ce problème aussi. Cela se produit avec VM et avec NodeVM.

Dans mon cas, à l'intérieur de NodeVM, j'ai un extrait qui, entre autres choses, fait ceci:

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

Et imprime:

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

La console dans la configuration de NodeVM est définie sur inherit .

Avez-vous une idée de ce qui pourrait générer ce comportement?

Merci d'avance et désolé de vous déranger.

Tous les 10 commentaires

Salut @patriksimek , je vous cite en tant que responsable principal. J'ai ce problème aussi. Cela se produit avec VM et avec NodeVM.

Dans mon cas, à l'intérieur de NodeVM, j'ai un extrait qui, entre autres choses, fait ceci:

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

Et imprime:

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

La console dans la configuration de NodeVM est définie sur inherit .

Avez-vous une idée de ce qui pourrait générer ce comportement?

Merci d'avance et désolé de vous déranger.

Cet objet s'est avéré être un proxy. Je crois que quelque part dans Decontextify.instance, un mauvais objet est renvoyé.

Produit la sortie attendue sous le nœud v8.9.3 et le nœud v8.10.0.
Le problème est confirmé sous le nœud v10.14.2

Ran dans ce même problème. Frustrant de suivre ce bug, pensant que c'était dans mon propre code. Finalement, j'ai décidé d'essayer un exemple très minimal et voilà, vm2 était le coupable. Il semble que la boucle for of fasse également des choses étranges avec les tableaux.

Produit la sortie attendue sous le nœud v8.9.3 et le nœud v8.10.0.
Le problème est confirmé sous le nœud v10.14.2

Ce que je peux proposer, c'est d'exécuter un débogueur dans v.8.10.0 et v10.14.2 et trouver une ligne de code où la sortie est différente.

Cela était dû à l'utilisation d'une interruption Proxy.handler.ownKeys (). C'était un problème dans node et semble être résolu dans la v12.

Prévoyez-vous un remplacement pour les anciennes versions de node?

Le problème ne concerne que le nœud 10. Nous pourrions faire une correction, mais cela nécessiterait de vérifier l'appelant d'une fonction à chaque fois et d'obtenir l'appelant, nous aurions besoin de générer une trace de pile. Je pense que cela ne vaut pas la peine de faire cela.

Le problème ne concerne que le nœud 10. Nous pourrions faire une correction, mais cela nécessiterait de vérifier l'appelant d'une fonction à chaque fois et d'obtenir l'appelant, nous aurions besoin de générer une trace de pile. Je pense que cela ne vaut pas la peine de faire cela.

Qu'en est-il à la place d'une vérification de configuration ou de paramètre CLI? Le code pour cela pourrait être assez minime.

J'ajoute console à vm._context
vm._context.console = console
vm.run("console.log([1,2,3])")
ça marche correctement!

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

vshymanskyy picture vshymanskyy  ·  8Commentaires

XmiliaH picture XmiliaH  ·  19Commentaires

unxcepted picture unxcepted  ·  11Commentaires

keyosk picture keyosk  ·  64Commentaires

ozsay picture ozsay  ·  5Commentaires