Vm2: 配列を実行すると、奇妙なオブジェクトが返されます。 [Node.js 10.xx]

作成日 2019年04月07日  ·  10コメント  ·  ソース: patriksimek/vm2

このようなコード:

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

プリント:
[ 1, 2, 3, '0': 1, '1': 2, '2': 3 ]
これはバグですか、それとも予想される動作ですか?

NodeJSのVMでのビルドは次を返します。
[1, 2, 3]
予想通り。

bug confirmed help wanted wontfix

最も参考になるコメント

こんにちは@patriksimek 、私はあなたをメインメンテナとして引用します。 私もこの問題を抱えています。 これはVMとNodeVMで発生します。

私の場合、NodeVM内に、-とりわけ-これを行うスニペットがあります。

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

そしてプリント:

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

NodeVMセットアップのコンソールはinherit設定されています。

この動作を生成する可能性のあるものについて何か手がかりがありますか?

よろしくお願いします。

全てのコメント10件

こんにちは@patriksimek 、私はあなたをメインメンテナとして引用します。 私もこの問題を抱えています。 これはVMとNodeVMで発生します。

私の場合、NodeVM内に、-とりわけ-これを行うスニペットがあります。

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

そしてプリント:

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

NodeVMセットアップのコンソールはinherit設定されています。

この動作を生成する可能性のあるものについて何か手がかりがありますか?

よろしくお願いします。

このオブジェクトはプロキシであることが判明しました。 Decontextify.instanceのどこかで、間違ったオブジェクトが返されると思います。

ノードv8.9.3およびノー​​ドv8.10.0で期待される出力を生成します。
この問題はノードv10.14.2で確認されています

これと同じ問題に遭遇しました。 このバグを追跡するのはイライラします。自分のコードにあると思っていました。 最終的には非常に最小限の例を試してみることにしましたが、見よ、 vm2が原因でした。 for ofループも配列で奇妙なことをしているようです。

ノードv8.9.3およびノー​​ドv8.10.0で期待される出力を生成します。
この問題はノードv10.14.2で確認されています

私が提案できるのは、v.8.10.0とv10.14.2でデバッガーを実行し、出力が異なるコード行を見つけることです。

これは、Proxy.handler.ownKeys()トラップを使用したことが原因でした。 これはノードの問題であり、v12で修正されたようです。

古いバージョンのノードのフォールバックを計画していますか?

問題はノード10でのみ発生します。修正を行うことはできますが、そのたびに関数の呼び出し元を確認し、呼び出し元を取得するには、スタックトレースを生成する必要があります。 これをする価値はないと思います。

問題はノード10でのみ発生します。修正を行うことはできますが、そのたびに関数の呼び出し元を確認し、呼び出し元を取得するには、スタックトレースを生成する必要があります。 これをする価値はないと思います。

代わりに、構成またはCLIパラメーターのチェックはどうですか? そのためのコードはかなり最小限である可能性があります。

consolevm._contextに追加します
vm._context.console = console
vm.run("console.log([1,2,3])")
正しく動作しています!

このページは役に立ちましたか?
0 / 5 - 0 評価