正規表現エンジン実装するのは流石にめんどいから、ネイティブのものを使うことになると思うけど、そうするとReDoSが行えるようになってしまう だからAiScriptのホストが正規表現エンジンを用意するようにさせよう
やりたい
これって構文として用意する? それか組み込み関数の追加で実現?
とりあえず関数で事足りそう
Re:match(str, pat)みたいな
Re:match(str, pat)
というよりは正規表現を変数に入れたりしたときあるから正規表現という値を生成する関数を作った方が良いかも
Re:match(str, Re:new('[a-z]+'))
みたいな
エスケープを減らすために生文字列リテラルはあると便利
欲しいですね…(外部に作るのが面倒だったので、AiSciprtで昨今のスパムを捌いています)
ホスト側でタイムアウト時間を設定できるようにして超えたらErrorを返すようにすればReDoSは回避できる?
Error
そもそもタイムアウトのための標準的な機構がjsの正規表現にないかも? ブラウザでReDoSに耐性のある正規表現の選択肢としてはre2-wasmのような安全な正規表現エンジンのwasmバインディングを使うか、recheckなどで事前に計算量が爆発しないかをチェックする方法しか知らないです。 事前チェックは偽陰性があるかもしれない(よく見てないのでもしかしたら大丈夫なのかもしれない)し、recheckはScala.js製でサイズがでかい(bundlephobia見るとmin+gzipで1MBある)
タイムアウトできるライブラリはNode.jsのvmとか使ってるのでブラウザで動かない(Worker使ったらできるか?) ので、どうやっても全部ホスト側で用意しないといけなそう。
まあ完全に信頼されたコードしか実行されないことが保証されているユースケースではReDoSの心配は無視できるから、とりあえずネイティブの正規表現で実装してオプションで外部から正規表現エンジンを設定できるようにすると良さそう
Activity
syuilo commentedon Apr 18, 2020
正規表現エンジン実装するのは流石にめんどいから、ネイティブのものを使うことになると思うけど、そうするとReDoSが行えるようになってしまう
だからAiScriptのホストが正規表現エンジンを用意するようにさせよう
syuilo commentedon Mar 15, 2023
やりたい
marihachi commentedon Oct 14, 2023
これって構文として用意する?
それか組み込み関数の追加で実現?
syuilo commentedon Oct 14, 2023
とりあえず関数で事足りそう
salano-ym commentedon Oct 14, 2023
Re:match(str, pat)みたいなsyuilo commentedon Oct 14, 2023
というよりは正規表現を変数に入れたりしたときあるから正規表現という値を生成する関数を作った方が良いかも
syuilo commentedon Oct 14, 2023
みたいな
salano-ym commentedon Oct 14, 2023
エスケープを減らすために生文字列リテラルはあると便利
Sayamame-beans commentedon Feb 17, 2024
欲しいですね…(外部に作るのが面倒だったので、AiSciprtで昨今のスパムを捌いています)
salano-ym commentedon May 14, 2024
ホスト側でタイムアウト時間を設定できるようにして超えたら
Errorを返すようにすればReDoSは回避できる?uzmoi commentedon May 15, 2024
そもそもタイムアウトのための標準的な機構がjsの正規表現にないかも?
ブラウザでReDoSに耐性のある正規表現の選択肢としてはre2-wasmのような安全な正規表現エンジンのwasmバインディングを使うか、recheckなどで事前に計算量が爆発しないかをチェックする方法しか知らないです。
事前チェックは偽陰性があるかもしれない(よく見てないのでもしかしたら大丈夫なのかもしれない)し、recheckはScala.js製でサイズがでかい(bundlephobia見るとmin+gzipで1MBある)
タイムアウトできるライブラリはNode.jsのvmとか使ってるのでブラウザで動かない(Worker使ったらできるか?)
ので、どうやっても全部ホスト側で用意しないといけなそう。
syuilo commentedon May 15, 2024
まあ完全に信頼されたコードしか実行されないことが保証されているユースケースではReDoSの心配は無視できるから、とりあえずネイティブの正規表現で実装してオプションで外部から正規表現エンジンを設定できるようにすると良さそう