ExpertiDict

JavaScript · Avançado · Português · Técnico

backtracking catastrófico

/bɛkˈtɾɛkĩ kataʃˈtɾɔfiku/substantivo

Falha de desempenho em expressões regulares em que o motor testa um número exponencial de caminhos antes de rejeitar o texto. Repetições aninhadas, como (a+)+, são a causa típica.

Onde usar

Aparece em code review de validações com regex sobre entrada do usuário, onde pode virar ataque de negação de serviço, o ReDoS. Como o motor roda numa thread só, uma regex lenta trava o servidor inteiro.

Em código

const re = /^(a+)+$/;
const ruim = 'a'.repeat(25) + 'b';
console.time('regex');
re.test(ruim); // cada 'a' extra dobra o tempo
console.timeEnd('regex');

Exemplos

Essa regex sofre backtracking catastrófico com texto longo.

Uma regex com repetição aninhada travou o servidor inteiro.

Cuidado

Validar entrada não confiável com regex de repetições aninhadas, sem limitar o tamanho do texto.

Sinônimos

ReDoS, catastrophic backtracking

Veja também

Todos os termos de JavaScript