Closed yapatta closed 3 years ago
q0からある文字charで一度でもどこかに遷移したらその他の遷移を考えなくなっちゃっているな。。。 目的のStateが違うときはちゃんと遷移しないといけない
完全に同じ遷移じゃない限りは遷移を生やすことができるという制約を見逃していた TransitionMapクラスにhasメソッドを作って対応した(同じ辺は存在しても1つなので計算量的にlog(sourceの個数)×log(charの個数)になっているから問題もないはず)
もとの検出と比較したところ残りは(a*)*
と(a+)+
に。
なんとなく二重辺壊しているような予感がする。
あと逆に新しく追加した(.*|(a|a)*)
がVulnerableになってしまった。いやこれはVulnerableでいいのか?(https://makenowjust-labo.github.io/redos/だとunsafeに)
@yuziroppe /^(.*|(a|a)*)$/s
だとsafeなはずです。(JavaScriptの正規表現の.
はデフォルトでは改行文字を含まないため)
残りのTODO(恐らく)
枝刈りでEDA誤検知は防げたが、IDA positiveがSafeになるな...
(.*)="(.*)
とa*a*
がIDA Safeになってしまう
他は以前と同じく正しく検知できている
VIzでデバッグしたら完全理解した。3直積のグラフを作成するとき、一つ枝切りEDAではなくもとのEDAを入れていた
枝刈り正しく検知するようになりました! もしよろしければマージお願いします
うおおお疲れさまです!
~~今現在枝切り実装が完了したが、もとのテストケースで
EDA: positive
、IDA: positive
のやつもfalse
になってしまっている。 検証始めます。~~すべてSafeになっているのまずいんだよなあ...また三浦くんが作ったredefine_state_2の新規Stateをもとに実装しております。
枝切り検出可能に
例:
(a|a)*?.*
,(.*|(a|a)*