alert メソッドの引数に ActiveXObject を渡すと落ちる
-
alert メソッドの引数に ActiveXObject や VBArray を渡すと、エラーが出ずにマクロが終了します。その後、何かしらのマクロを実行しようとすると、数秒後に Mery が落ちてしまいます。
具体的には、
var d = new ActiveXObject('Scripting.Dictionary'); alert(d);
や
var d = new ActiveXObject('Scripting.Dictionary'); alert(d.Keys());
といったマクロを実行した後、何かしらのマクロを実行しようとすると落ちます。
そもそもエラーになる行為なので、普通はやらないとは思うのですが、Tag プロパティを試していてうっかりやってしまいました。
ちなみに、
<!DOCTYPE html> <title>Test</title> <script> var d = new ActiveXObject('Scripting.Dictionary'); d('foo') = 'bar'; </script> <button onclick="alert(d)" type="button">alert(d)</button> <button onclick="alert(d.Keys())" type="button">alert(d.Keys())</button> <button onclick="alert(d.Keys().toArray())" type="button">alert(d.Keys().toArray())</button>
という HTML を作って Internet Explorer 11 で開き、コンソールを見てみると、「引数の数が一致していません。または不正なプロパティを指定しています。」や「文字列を指定してください。」といったエラーが記されます。
■ 検証環境
OS: Windows 10 1909 64bit (OSビルド 18363.720)
CPU: Intel Core i5-6200U
メモリ: 8GB
グラフィック: Intel HD Graphics 520
Mery: 2.6.7 と 3.0.0 (共に 64 ビット版で設定は初期状態)| ucky | 返信 -
ご報告ありがとうございます。
頂いた条件で現象を再現することができました。
JavaScript の型って非常に厄介で、実は、Ver 3.0.0 未満ですと alert(null); でもクラッシュしてしまいます。
一応これは Ver 3.0.0 で対策をしておいたのですが、このような型変換もあったのは気付いていませんでした。
対策を調査してみたいと思います。
| Kuro | 返信 -
Ver 3.0.1 でちゃんとエラーが出て Mery が落ちないことを確認しました。
対策をしていただき、ありがとうございました。
| ucky | 返信 -
ご確認いただきありがとうございます。
この対策で合ってるかちょっと不安だったので、うまく動いているとのことで安心しました。
| Kuro | 返信