タグ

2022年12月13日のブックマーク (1件)

  • キャッシュによるRubyの正規表現のマッチングの高速化の紹介 - クックパッド開発者ブログ

    9月からRuby開発チームにインターンシップとして参加している@makenowjustです。 総合研究大学院大学の学生で、普段は情報セキュリティに関する研究をしています。 インターンシップでは、キャッシュ (メモ化) を利用したRubyの正規表現の高速化を行いました。 ReDoSと呼ばれる、バックトラックが爆発することでマッチング時間が膨大になる脆弱性があります (ReDoSについては、拙作ですがWEB+DB PRESSに掲載された記事があります)。 近年、ReDoSは多く報告されており、Rubyもその例外ではありません (参考1、参考2)。 今回実装した最適化は、ReDoSを防ぐことを目的としたもので、多くの正規表現のマッチング時間が文字列の長さに対して線形となります。 ReDoSが起こる正規表現の例として、/^(a|a)*$/が挙げられます。 今回の修正の前後での実行時間を比較すると、

    キャッシュによるRubyの正規表現のマッチングの高速化の紹介 - クックパッド開発者ブログ
    shunkeen
    shunkeen 2022/12/13
    メモ化で線形時間になるのPEG(パックラット構文解析)みある。しかしVM型の正規表現エンジンにメモ化ぶち込む技量がすごいし、時間計算量と空間計算量のバランスの取り方も現実見てる感じあるし、つよつよ学生だ…