n4o847 / seccamp-redos

A tool for detecting ReDoS vulnerabilities based on automata theory.
https://n4o847.github.io/seccamp-redos/
7 stars 4 forks source link

State の相互変換について #22

Closed n4o847 closed 3 years ago

n4o847 commented 3 years ago

19 の続き

状態のタプル・集合を文字列操作することについて、

という補完的な性質があるので、これらを組み合わせるのが良い気がします。

構想としては

という感じです。

yapatta commented 3 years ago

良さげです!枝刈りNFA作成時に実験的に作ってみます

yapatta commented 3 years ago

てかこれならばクラスを独自作成したほうがいいのか

n4o847 commented 3 years ago

ちょっとすでにやってみちゃってて、見てもらいたさがあります。

yuziroppe さんがアイデアがあるならそれはそれで気になりますが……

n4o847 commented 3 years ago

クラスを独自作成とはどういうことでしょう?

yapatta commented 3 years ago

今構想としているのは(擬似コードですが)

class DirectProductState {
private stateList: [State,State];

getState() {
return stateList;
}

toString() {
return `${Array.from(stateSet).sort().join(', ')}`;
}
}

こんなイメージです 既に作っているなら是非見ます!

yapatta commented 3 years ago

これだけじゃだめでオートマトン内での複数状態を表す処理を今書いていないことに気づいた

n4o847 commented 3 years ago

今 redefine_state_2 というブランチで 4d4c0a2d5525f5415730dafef85ad3e2198ca4df までやっているのですが、これをやると DFA 構築がかなりシンプルになったので直積でも楽になるんじゃないかという……(急いでてめっちゃ雑になってしまってすみません)

yapatta commented 3 years ago

なるほどここまで書いてたんですね...すごい DFAの状態を具体的に明示できそうなのすごく助かります

n4o847 commented 3 years ago

こんな込み入った型パズルやっていいのかという背徳感が……

状態の集合が(今までの Q\d+ から {q\d+, q\d+, ...} に変わったので)デバッグしやすくなってるのと、今までの _ 方式と共存できるのでどうにでもできる感じではありますが、バシバシ変更が加わる事自体が申し訳なく……

n4o847 commented 3 years ago

いま masa5555 さんがIDA、 yuziroppe さんが枝刈り、ぼくが攻撃文字列というタスクを急いでいる現状で、無理にこの変更を加えるのはやばいので、いったん放置しておく、あるいはもっと漸進的に移行するようにする、というのがあります。

n4o847 commented 3 years ago

25 と同時に取り込まれたため閉じます。