alert メソッドの引数に ActiveXObject を渡すと落ちる

  1. 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  |  返信
  2. ご報告ありがとうございます。

    頂いた条件で現象を再現することができました。

    JavaScript の型って非常に厄介で、実は、Ver 3.0.0 未満ですと alert(null); でもクラッシュしてしまいます。

    一応これは Ver 3.0.0 で対策をしておいたのですが、このような型変換もあったのは気付いていませんでした。

    対策を調査してみたいと思います。

     |  Kuro  |  返信
  3. Ver 3.0.1 でちゃんとエラーが出て Mery が落ちないことを確認しました。

    対策をしていただき、ありがとうございました。

     |  ucky  |  返信
  4. ご確認いただきありがとうございます。

    この対策で合ってるかちょっと不安だったので、うまく動いているとのことで安心しました。

     |  Kuro  |  返信
スポンサーリンク