AFLplusplus / AFLplusplus/Grammar-Mutator

optimized syntax '+' cause 'random_recursive_mutation' error

未關閉
#42 5 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
Python
星號
274
分支
24
PR 合併指標
30 天內沒有已合併 PR

描述

going further, I found a way to mitigate;

based on the above issues, we create simpler test cases, `test.json`:
```
{
"": [["I ", "", "like C++\n"]],
"": [["", ""], []],
"": [["very "]]
}
```

tanslate to `test.g4`:
```
grammar test;
entry: 'I ' stmt1 'like C++\n' EOF
;
stmt1:
| NODE stmt1
;
NODE : 'very '
;
```

and input `40960_very.txt`:
```
I very very ...(*40956)... very very like C++
```

running with `antlr4-parse`:
![Screen Shot 2024-01-08 at 17 56 39](https://github.com/AFLplusplus/Grammar-Mutator/assets/21287921/b507416e-4668-4cc6-8964-6f144416fc4b)

from the perspective of antlr4, we can use the `+` syntax to describe `test.g4`, and ignore this prefix matching, as follows `test.g4`:
```
grammar test;
entry: 'I ' stmt1 'like C++\n' EOF
;
stmt1:
| (NODE)+
;
NODE : 'very '
;
```

running again with `antlr4-parse`:
![Screen Shot 2024-01-08 at 17 59 40](https://github.com/AFLplusplus/Grammar-Mutator/assets/21287921/a0745df3-c0ee-4ccc-ac94-e88ee053dc85)

so I made a patch to implement the above ideas, please refer to https://github.com/0x7Fancy/Grammar-Mutator/commit/6eae7d14f579b4d3d1196fc1a288c61044a1afe1;

I have only implemented the optimization of head recursion and tail recursion here, which is simple and easy to understand. for intermediate recursion, I think it can be rewritten as head/tail recursion in json

of course, this is just a mitigation measure. When the mutation generates a sufficiently complex syntax tree, it may still cause antlr4 to get stuck in syntax parsing.

_Originally posted by @0x7Fancy in https://github.com/AFLplusplus/Grammar-Mutator/issues/17#issuecomment-1880701080_

貢獻指南

這個儲存庫沒有索引到貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。