2021-01-02: ReDoSのやつを直したりしていた
やったこと
グラブル
ガチャピンとムックが来た、が初手終了だった。
でもムックでシャトラきたからOKです。
https://twitter.com/make_now_just/status/1345201367288217600
デレ
ほたる2枚目。運が良い。
https://twitter.com/make_now_just/status/1345207494319038465
シャニ
はづ吉だった。
https://twitter.com/make_now_just/status/1345220343250657280
マギレコ
極大吉だった。
https://twitter.com/make_now_just/status/1345220173729464320
そして天井へ‥‥。
いつの間にか本物の天井が200になっていた。ありがたい。
https://twitter.com/make_now_just/status/1345241349147164674
なんか引いたときの演出ムービーが気合い入っててよかった。
マギレコやっていくか。
ReDoS
文字を消費しないループの扱いが間違っていたので修正した。
https://github.com/MakeNowJust-Labo/redos/pull/26
具体的には、文字を消費せずにループを抜けてしまってはいけないのだけど、これを検出するためにLoopEnterとLoopExitというε遷移の属性を追加して、ε閉包を求めるときにLoopEnterを通過したら、その遷移を記録して、もう一度同じ遷移や対応するLoopExitを通過した場合は失敗とする、という処理を入れるようにした。
この結果、/^(a()*a)*$/みたいな正規表現が脆弱でないと正しく判断されるようになった。
完全にこの対応を忘れていた。危ない危ない。