Skip to content

正規表現サポート #45

Open
Open

Description

@syuilo
No description provided.

Activity

  1. syuilo commented on Apr 18, 2020

    @syuilo
    CollaboratorAuthor

    正規表現エンジン実装するのは流石にめんどいから、ネイティブのものを使うことになると思うけど、そうするとReDoSが行えるようになってしまう
    だからAiScriptのホストが正規表現エンジンを用意するようにさせよう

  2. syuilo commented on Mar 15, 2023

    @syuilo
    CollaboratorAuthor

    やりたい

  3. self-assigned this
    on Mar 15, 2023
  4. marihachi commented on Oct 14, 2023

    @marihachi
    Contributor

    これって構文として用意する?
    それか組み込み関数の追加で実現?

  5. syuilo commented on Oct 14, 2023

    @syuilo
    CollaboratorAuthor

    とりあえず関数で事足りそう

  6. salano-ym commented on Oct 14, 2023

    @salano-ym
    Member

    Re:match(str, pat)みたいな

  7. syuilo commented on Oct 14, 2023

    @syuilo
    CollaboratorAuthor

    というよりは正規表現を変数に入れたりしたときあるから正規表現という値を生成する関数を作った方が良いかも

  8. syuilo commented on Oct 14, 2023

    @syuilo
    CollaboratorAuthor
    Re:match(str, Re:new('[a-z]+'))
    

    みたいな

  9. salano-ym commented on Oct 14, 2023

    @salano-ym
    Member

    エスケープを減らすために生文字列リテラルはあると便利

  10. Sayamame-beans commented on Feb 17, 2024

    @Sayamame-beans
    Contributor

    欲しいですね…(外部に作るのが面倒だったので、AiSciprtで昨今のスパムを捌いています)

  11. pinned this issue on Feb 17, 2024
  12. salano-ym commented on May 14, 2024

    @salano-ym
    Member

    ホスト側でタイムアウト時間を設定できるようにして超えたらErrorを返すようにすればReDoSは回避できる?

  13. uzmoi commented on May 15, 2024

    @uzmoi
    Member

    そもそもタイムアウトのための標準的な機構がjsの正規表現にないかも?
    ブラウザでReDoSに耐性のある正規表現の選択肢としてはre2-wasmのような安全な正規表現エンジンのwasmバインディングを使うか、recheckなどで事前に計算量が爆発しないかをチェックする方法しか知らないです。
    事前チェックは偽陰性があるかもしれない(よく見てないのでもしかしたら大丈夫なのかもしれない)し、recheckはScala.js製でサイズがでかい(bundlephobia見るとmin+gzipで1MBある)

    タイムアウトできるライブラリはNode.jsのvmとか使ってるのでブラウザで動かない(Worker使ったらできるか?)
    ので、どうやっても全部ホスト側で用意しないといけなそう。

  14. syuilo commented on May 15, 2024

    @syuilo
    CollaboratorAuthor

    まあ完全に信頼されたコードしか実行されないことが保証されているユースケースではReDoSの心配は無視できるから、とりあえずネイティブの正規表現で実装してオプションで外部から正規表現エンジンを設定できるようにすると良さそう

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions