Vm2: Mengeksekusi sebuah array mengembalikan objek aneh. [Node.js 10.xx]

Dibuat pada 7 Apr 2019  ·  10Komentar  ·  Sumber: patriksimek/vm2

Kode seperti ini:

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

Cetakan:
[ 1, 2, 3, '0': 1, '1': 2, '2': 3 ]
Apakah ini bug atau perilaku yang diharapkan?

Build NodeJS di VM menghasilkan:
[1, 2, 3]
seperti yang diharapkan.

bug confirmed help wanted wontfix

Komentar yang paling membantu

Hai @patriksimek , saya mengutip Anda sebagai pengelola utama. Saya juga mengalami masalah ini. Ini terjadi dengan VM dan dengan NodeVM.

Dalam kasus saya, di dalam NodeVM saya memiliki cuplikan yang -di antara hal-hal lain- melakukan ini:

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

Dan mencetak:

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

Konsol dalam penyiapan NodeVM disetel ke inherit .

Apakah Anda tahu apa yang dapat menyebabkan perilaku ini?

Terima kasih sebelumnya dan maaf mengganggu.

Semua 10 komentar

Hai @patriksimek , saya mengutip Anda sebagai pengelola utama. Saya juga mengalami masalah ini. Ini terjadi dengan VM dan dengan NodeVM.

Dalam kasus saya, di dalam NodeVM saya memiliki cuplikan yang -di antara hal-hal lain- melakukan ini:

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

Dan mencetak:

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

Konsol dalam penyiapan NodeVM disetel ke inherit .

Apakah Anda tahu apa yang dapat menyebabkan perilaku ini?

Terima kasih sebelumnya dan maaf mengganggu.

Objek ini ternyata Proxy. Saya percaya bahwa di suatu tempat di Decontextify.instance objek yang salah dikembalikan.

Menghasilkan keluaran yang diharapkan pada node v8.9.3 dan node v8.10.0.
Masalahnya dikonfirmasi di bawah node v10.14.2

Mengalami masalah yang sama ini. Frustasi melacak bug ini, mengira itu ada di kode saya sendiri. Akhirnya memutuskan untuk mencoba contoh yang sangat minim dan lihatlah, vm2 adalah pelakunya. Tampaknya loop for of juga melakukan beberapa hal aneh dengan array.

Menghasilkan keluaran yang diharapkan pada node v8.9.3 dan node v8.10.0.
Masalahnya dikonfirmasi di bawah node v10.14.2

Apa yang dapat saya usulkan adalah menjalankan debugger di v.8.10.0 dan v10.14.2 dan menemukan baris kode yang hasilnya berbeda.

Ini disebabkan oleh penggunaan perangkap Proxy.handler.ownKeys (). Ini adalah masalah di node dan sepertinya sudah diperbaiki di v12.

Apakah Anda merencanakan fallback untuk versi node yang lebih lama?

Masalahnya hanya pada node 10. Kita bisa melakukan perbaikan, tapi itu akan membutuhkan untuk memeriksa pemanggil suatu fungsi setiap saat dan untuk mendapatkan pemanggil kita perlu membuat pelacakan tumpukan. Saya pikir tidak ada gunanya melakukan ini.

Masalahnya hanya pada node 10. Kita bisa melakukan perbaikan, tapi itu akan membutuhkan untuk memeriksa pemanggil suatu fungsi setiap saat dan untuk mendapatkan pemanggil kita perlu membuat pelacakan tumpukan. Saya pikir tidak ada gunanya melakukan ini.

Bagaimana dengan config atau pemeriksaan parameter CLI? Kode untuk itu bisa sangat minim.

Saya menambahkan console ke vm._context
vm._context.console = console
vm.run("console.log([1,2,3])")
itu bekerja dengan benar!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat