Catastrophic backtracking of regexp match in getCloseTag
#41 geöffnet am 15.05.2017
Repository-Metriken
- Stars
- (180 Sterne)
- PR-Merge-Metriken
- (PR-Metriken ausstehend)
Beschreibung
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.
What seems scary is that hung extension host survives restart of VS Code and continues eating CPU as a zombie process. Is it normal?