formulahendry/vscode-auto-close-tag

Catastrophic backtracking of regexp match in getCloseTag

Ouverte

#41 ouverte le 15 mai 2017

 (3 commentaires) (0 réaction) (0 personne assignée)TypeScript (52 forks)github user discovery
bughelp wanted

Métriques du dépôt

Stars
 (180 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

Description

Invoking auto close tag after lengthy tag (say, SVG <shape d="(lots of data)" />) either void/self-closing (<.../>) or with white-space before > hangs the extension:

<x 
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9/>
<y>|

(try https://regex101.com/r/CZBpI4/1 )

I'd try to change the regexp at [1] from /<(\/?[a-zA-Z][a-zA-Z0-9:\-_.]*)(?:\s+[^<>]*?[^\s/<>=]+?)*?>/g (BTW, why such complicated?) to say <((\/?)[a-zA-Z][a-zA-Z0-9:\-_.]*)\s*[^>]*?(\/?)> to prevent that (just guess, haven't tested myself yet in VSC).

Sorry for hurried report; just burnt evening tracking this with no time left for fixup.

[1] https://github.com/formulahendry/vscode-auto-close-tag/blob/ee36d506641990632bf79326f2adc4fc69efa288/src/extension.ts#L135


What seems scary is that hung extension host survives restart of VS Code and continues eating CPU as a zombie process. Is it normal?

Guide contributeur