Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

正規表現サポート #45

Open
syuilo opened this issue Apr 18, 2020 · 12 comments
Open

正規表現サポート #45

syuilo opened this issue Apr 18, 2020 · 12 comments
Assignees
Labels
enhancement New feature or request interpreter

Comments

@syuilo
Copy link
Collaborator

syuilo commented Apr 18, 2020

No description provided.

@syuilo
Copy link
Collaborator Author

syuilo commented Apr 18, 2020

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

@syuilo
Copy link
Collaborator Author

syuilo commented Mar 15, 2023

やりたい

@syuilo syuilo self-assigned this Mar 15, 2023
@marihachi
Copy link
Contributor

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

@syuilo
Copy link
Collaborator Author

syuilo commented Oct 14, 2023

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

@salano-ym
Copy link
Member

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

@syuilo
Copy link
Collaborator Author

syuilo commented Oct 14, 2023

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

@syuilo
Copy link
Collaborator Author

syuilo commented Oct 14, 2023

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

みたいな

@salano-ym
Copy link
Member

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

@Sayamame-beans
Copy link
Contributor

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

@salano-ym salano-ym added the enhancement New feature or request label Feb 17, 2024
@marihachi marihachi pinned this issue Feb 17, 2024
@salano-ym
Copy link
Member

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

@uzmoi
Copy link
Member

uzmoi commented May 15, 2024

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

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

@syuilo
Copy link
Collaborator Author

syuilo commented May 15, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request interpreter
Projects
None yet
Development

No branches or pull requests

5 participants