AFLplusplus / AFLplusplus/Grammar-Mutator

optimized syntax '+' cause 'random_recursive_mutation' error

Abierto
#42 5 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
274
Forks
24
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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_

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.