formulahendry/vscode-auto-close-tag

Catastrophic backtracking of regexp match in getCloseTag

開放

#41 建立於 2017年5月15日

 (3 則留言) (0 個反應) (0 位負責人)TypeScript (52 個分叉)github user discovery
bughelp wanted

倉庫指標

星標
 (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.

[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?

貢獻者指南