Catastrophic backtracking of regexp match in getCloseTag
#41 建立於 2017年5月15日
倉庫指標
- 星標
- (180 顆星)
- PR 合併指標
- (PR 指標待抓取)
描述
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?