鬼雲使用時、"選択した範囲のみ"かつ1文字のみの置換でアプリケーションが応答なしになる

  1. 開発お疲れさまです。
    恐らく鬼雲由来の事象じゃなかろうかと思っているのですが、見つけてしまったのでご報告します。

    Mery ver 3.3.4

    # 前提条件

    ・オプションの「鬼車を使用する」にチェックを入れない

    # 再現方法

    1. 「123み456」という文字を入力する
    2. 入力内容のうち "3み4" のみを選択状態にする
    3. 置換窓を表示し、「正規表現を使用する」と「選択した範囲のみ」にチェックを入れ、検索する文字列は「み」、置換後の文字列は任意の文字列にして、[すべて置換]ボタンをクリックする
    4. 応答なしとなる

    # 備考

    以下いずれかの状態にすると、上記の事象は発生せずに正しく動作します。
    ・「鬼車を使用する」にチェックを入れる(鬼雲を使用しない)
    ・「正規表現を使用する」にチェックを入れない
    ・「選択した範囲のみ」にチェックを入れない
    ・検索文字列を2文字以上にする
    ・検索文字列を"ま" (U+307E) 以前のコードポイントを用いるようにする

    最後の「"ま" (U+307E) 以前のコードポイントを用いる」は、しっかりと検証できていないのですが、その前後の文字で検索した際の動作から察するに、"ま"と"み"が事象発生の境界ではないかとおもいます。

     |  yuko  |  返信
  2. ご報告と詳細な再現手順をありがとうございます。

    いただいた条件で現象を再現できました。

    Ver 3.3.1 では問題ないようなので Ver 3.3.2 で試験的に行った下記の仕様変更がトリガーになっているような気がします。

    ・鬼雲の USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE をオフにした
    ・鬼車を USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE をオフにした仕様に修正

    【関連トピック】
    https://www.haijin-boys.com/discussions/5663

    しかし、"ま" なら大丈夫で "み" ならフリーズというのは謎過ぎる挙動ですね。

    上記の仕様変更は [次を検索] と [前を検索] で結果をできるだけ一致させるためのものなのでロールバックは避けたいところですが、フリーズは良くないですね。

    何か対策がないか調査してみたいと思います。

     |  Kuro  |  返信
  3. > しかし、"ま" なら大丈夫で "み" ならフリーズというのは謎過ぎる挙動ですね。

    本当に不思議ですね…🤔

    ちなみに、箇条書きで行頭に「・」が付いている複数行をMarkdownのリスト形式にしようと範囲選択→「・」を「- 」置換…としようとしたらこの症状に気付いた次第です。

    お手数を掛けてしまいますが、調査の方よろしくお願いします。

     |  yuko  |  返信
  4. たぶん同じ原因だと思いますが。

    11 a A
    12 b B
    13 c C
    (文字間はタブ)

    1. 上記のテキストで、2行目を選択する
    2. 置換ダイアログで、
      [検索する文字列]に「\d+\t」
      [正規表現を使用する]をチェックする
      [選択した範囲のみ]をチェックする
    3. [すべて置換]をクリックする
    そうすると、フリーズします。

    「12 b」を選択した場合は問題ありません。

     |  774  |  返信
  5. >> yuko さん、774 さん

    情報ありがとうございます。
    いただいた条件でも現象を確認できました。

    やっぱり鬼車と鬼雲の両対応は難しいですね。あちらを立てればこちらが立たずといった感じですが、なんとなく原因はつかめてきました。

    次のバージョンでは対策できると思います。(自信はないですが…😱)

     |  Kuro  |  返信
  6. >> Kuroさん

    早速、v3.3.5 を使用させていただきました。
    解消されており、お見事です!ありがとうございました🙇‍♂️

    不思議な事象だったので興味本位で聞いてしまいますが、結局これは鬼雲の不具合だったのでしょうか?

     |  yuko  |  返信
  7. フリーズしなくなったことを確認しました。
    ご対応ありがとうございました。

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

    いただいた条件下とその他いくつかのパターンでテストはしましたが、これで解消されているのかどうか、ちょっと自信がないところです😅

    > 不思議な事象だったので興味本位で聞いてしまいますが、結局これは鬼雲の不具合だったのでしょうか?

    鬼雲のソースコードまでは追ってないのでそれが不具合なのかどうかは分かりませんが、鬼雲の API (onig_search) 呼び出しで応答なしになっていました。

    鬼雲と鬼車、昔は互換性があったのですが現在では完全にそれぞれが独自仕様になっていて、その仕様の差分を Mery の中で吸収してるかたちになっています。

    そのため、Ver 3.3.2 で Mery の仕様を若干、鬼車側に寄せてしまったことが鬼雲先生の逆鱗に触れてしまったようです。(従来は鬼雲用に独自処理を入れていたのですが、それを廃止して鬼車と共通処理にしました)

    今回の修正では鬼車と鬼雲で同じ API に同じパラメーターを渡してもきちんと動作するような落としどころを見つけた次第ですが、うーん、自信ないですー😭

     |  Kuro  |  返信
  9. >> Kuroさん

    正規表現ライブラリに応じて細かな気配りが必要なのですね…複数のライブラリに対応しようとすると苦労が増えますね…🤨

    > 今回の修正では鬼車と鬼雲で同じ API に同じパラメーターを渡してもきちんと動作するような落としどころを見つけた次第ですが、うーん、自信ないですー😭

    もし何か見つかったらまたご連絡しますが、きっと大丈夫だと思っています!

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