formulahendry/vscode-auto-close-tag

Catastrophic backtracking of regexp match in getCloseTag

Open

#41 opened on May 15, 2017

View on GitHub
 (3 comments) (0 reactions) (0 assignees)TypeScript (52 forks)github user discovery
bughelp wanted

Repository metrics

Stars
 (180 stars)
PR merge metrics
 (PR metrics pending)

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?

Contributor guide