From 5931743a01db06e4b7ff313dd17404c1a7a3e2b1 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 10 Nov 2016 15:57:44 -0800 Subject: [PATCH] Fix Fenced Code Syntax Highlighting in Markdown Leaking (#14626) * Use while in fenced code blocks to prevent breakout * Fix a few edge cases for code blocks --- .../markdown/syntaxes/markdown.tmLanguage | 228 +++++++++--------- 1 file changed, 114 insertions(+), 114 deletions(-) diff --git a/extensions/markdown/syntaxes/markdown.tmLanguage b/extensions/markdown/syntaxes/markdown.tmLanguage index d2f86783846..abd160f5678 100644 --- a/extensions/markdown/syntaxes/markdown.tmLanguage +++ b/extensions/markdown/syntaxes/markdown.tmLanguage @@ -546,11 +546,11 @@ fenced_code_block_css begin - (^|\G)\s*([`~]{3,})\s*(css|css.erb)\s*$ + (^|\G)\s*(([`~]){3,})\s*(css|css.erb)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -562,11 +562,11 @@ fenced_code_block_basic begin - (^|\G)\s*([`~]{3,})\s*(html|htm|shtml|xhtml|inc|tmpl|tpl)\s*$ + (^|\G)\s*(([`~]){3,})\s*(html|htm|shtml|xhtml|inc|tmpl|tpl)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -578,11 +578,11 @@ fenced_code_block_ini begin - (^|\G)\s*([`~]{3,})\s*(ini|conf)\s*$ + (^|\G)\s*(([`~]){3,})\s*(ini|conf)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -594,11 +594,11 @@ fenced_code_block_java begin - (^|\G)\s*([`~]{3,})\s*(java|bsh)\s*$ + (^|\G)\s*(([`~]){3,})\s*(java|bsh)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -610,11 +610,11 @@ fenced_code_block_lua begin - (^|\G)\s*([`~]{3,})\s*(lua)\s*$ + (^|\G)\s*(([`~]){3,})\s*(lua)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -626,11 +626,11 @@ fenced_code_block_makefile begin - (^|\G)\s*([`~]{3,})\s*(Makefile|makefile|GNUmakefile|OCamlMakefile)\s*$ + (^|\G)\s*(([`~]){3,})\s*(Makefile|makefile|GNUmakefile|OCamlMakefile)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -642,11 +642,11 @@ fenced_code_block_perl begin - (^|\G)\s*([`~]{3,})\s*(perl|pl|pm|pod|t|PL|psgi|vcl)\s*$ + (^|\G)\s*(([`~]){3,})\s*(perl|pl|pm|pod|t|PL|psgi|vcl)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -658,11 +658,11 @@ fenced_code_block_r begin - (^|\G)\s*([`~]{3,})\s*(R|r|s|S|Rprofile)\s*$ + (^|\G)\s*(([`~]){3,})\s*(R|r|s|S|Rprofile)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -674,11 +674,11 @@ fenced_code_block_ruby begin - (^|\G)\s*([`~]{3,})\s*(ruby|rb|rbx|rjs|Rakefile|rake|cgi|fcgi|gemspec|irbrc|Capfile|ru|prawn|Cheffile|Gemfile|Guardfile|Hobofile|Vagrantfile|Appraisals|Rantfile|Berksfile|Berksfile.lock|Thorfile|Puppetfile)\s*$ + (^|\G)\s*(([`~]){3,})\s*(ruby|rb|rbx|rjs|Rakefile|rake|cgi|fcgi|gemspec|irbrc|Capfile|ru|prawn|Cheffile|Gemfile|Guardfile|Hobofile|Vagrantfile|Appraisals|Rantfile|Berksfile|Berksfile.lock|Thorfile|Puppetfile)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -690,11 +690,11 @@ fenced_code_block_php begin - (^|\G)\s*([`~]{3,})\s*(php|php3|php4|php5|phpt|phtml|aw|ctp)\s*$ + (^|\G)\s*(([`~]){3,})\s*(php|php3|php4|php5|phpt|phtml|aw|ctp)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -706,11 +706,11 @@ fenced_code_block_sql begin - (^|\G)\s*([`~]{3,})\s*(sql|ddl|dml)\s*$ + (^|\G)\s*(([`~]){3,})\s*(sql|ddl|dml)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -722,11 +722,11 @@ fenced_code_block_vs_net begin - (^|\G)\s*([`~]{3,})\s*(vb)\s*$ + (^|\G)\s*(([`~]){3,})\s*(vb)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -738,11 +738,11 @@ fenced_code_block_xml begin - (^|\G)\s*([`~]{3,})\s*(xml|xsd|tld|jsp|pt|cpt|dtml|rss|opml)\s*$ + (^|\G)\s*(([`~]){3,})\s*(xml|xsd|tld|jsp|pt|cpt|dtml|rss|opml)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -754,11 +754,11 @@ fenced_code_block_xsl begin - (^|\G)\s*([`~]{3,})\s*(xsl|xslt)\s*$ + (^|\G)\s*(([`~]){3,})\s*(xsl|xslt)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -770,11 +770,11 @@ fenced_code_block_yaml begin - (^|\G)\s*([`~]{3,})\s*(yaml|yml)\s*$ + (^|\G)\s*(([`~]){3,})\s*(yaml|yml)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -786,11 +786,11 @@ fenced_code_block_dosbatch begin - (^|\G)\s*([`~]{3,})\s*(bat|batch)\s*$ + (^|\G)\s*(([`~]){3,})\s*(bat|batch)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -802,11 +802,11 @@ fenced_code_block_clojure begin - (^|\G)\s*([`~]{3,})\s*(clj|cljs|clojure)\s*$ + (^|\G)\s*(([`~]){3,})\s*(clj|cljs|clojure)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -818,11 +818,11 @@ fenced_code_block_coffee begin - (^|\G)\s*([`~]{3,})\s*(coffee|Cakefile|coffee.erb)\s*$ + (^|\G)\s*(([`~]){3,})\s*(coffee|Cakefile|coffee.erb)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -834,11 +834,11 @@ fenced_code_block_c begin - (^|\G)\s*([`~]{3,})\s*(c|h)\s*$ + (^|\G)\s*(([`~]){3,})\s*(c|h)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -850,11 +850,11 @@ fenced_code_block_diff begin - (^|\G)\s*([`~]{3,})\s*(patch|diff|rej)\s*$ + (^|\G)\s*(([`~]){3,})\s*(patch|diff|rej)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -866,11 +866,11 @@ fenced_code_block_dockerfile begin - (^|\G)\s*([`~]{3,})\s*(dockerfile|Dockerfile)\s*$ + (^|\G)\s*(([`~]){3,})\s*(dockerfile|Dockerfile)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -882,11 +882,11 @@ fenced_code_block_git_commit begin - (^|\G)\s*([`~]{3,})\s*(COMMIT_EDITMSG|MERGE_MSG)\s*$ + (^|\G)\s*(([`~]){3,})\s*(COMMIT_EDITMSG|MERGE_MSG)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -898,11 +898,11 @@ fenced_code_block_git_rebase begin - (^|\G)\s*([`~]{3,})\s*(git-rebase-todo)\s*$ + (^|\G)\s*(([`~]){3,})\s*(git-rebase-todo)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -914,11 +914,11 @@ fenced_code_block_groovy begin - (^|\G)\s*([`~]{3,})\s*(groovy|gvy)\s*$ + (^|\G)\s*(([`~]){3,})\s*(groovy|gvy)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -930,11 +930,11 @@ fenced_code_block_jade begin - (^|\G)\s*([`~]{3,})\s*(jade)\s*$ + (^|\G)\s*(([`~]){3,})\s*(jade)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -946,11 +946,11 @@ fenced_code_block_js begin - (^|\G)\s*([`~]{3,})\s*(js|jsx|javascript)\s*$ + (^|\G)\s*(([`~]){3,})\s*(js|jsx|javascript)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -962,11 +962,11 @@ fenced_code_block_js_regexp begin - (^|\G)\s*([`~]{3,})\s*(regexp)\s*$ + (^|\G)\s*(([`~]){3,})\s*(regexp)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -978,11 +978,11 @@ fenced_code_block_json begin - (^|\G)\s*([`~]{3,})\s*(json|sublime-settings|sublime-menu|sublime-keymap|sublime-mousemap|sublime-theme|sublime-build|sublime-project|sublime-completions)\s*$ + (^|\G)\s*(([`~]){3,})\s*(json|sublime-settings|sublime-menu|sublime-keymap|sublime-mousemap|sublime-theme|sublime-build|sublime-project|sublime-completions)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -994,11 +994,11 @@ fenced_code_block_less begin - (^|\G)\s*([`~]{3,})\s*(less)\s*$ + (^|\G)\s*(([`~]){3,})\s*(less)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -1010,11 +1010,11 @@ fenced_code_block_objc begin - (^|\G)\s*([`~]{3,})\s*(objectivec|mm|objc|obj-c|m|h)\s*$ + (^|\G)\s*(([`~]){3,})\s*(objectivec|mm|objc|obj-c|m|h)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -1026,11 +1026,11 @@ fenced_code_block_perl6 begin - (^|\G)\s*([`~]{3,})\s*(perl6|p6|pl6|pm6|nqp)\s*$ + (^|\G)\s*(([`~]){3,})\s*(perl6|p6|pl6|pm6|nqp)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -1042,11 +1042,11 @@ fenced_code_block_powershell begin - (^|\G)\s*([`~]{3,})\s*(powershell|ps1|psm1|psd1)\s*$ + (^|\G)\s*(([`~]){3,})\s*(powershell|ps1|psm1|psd1)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -1058,11 +1058,11 @@ fenced_code_block_python begin - (^|\G)\s*([`~]{3,})\s*(python|py|py3|rpy|pyw|cpy|SConstruct|Sconstruct|sconstruct|SConscript|gyp|gypi)\s*$ + (^|\G)\s*(([`~]){3,})\s*(python|py|py3|rpy|pyw|cpy|SConstruct|Sconstruct|sconstruct|SConscript|gyp|gypi)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -1074,11 +1074,11 @@ fenced_code_block_regexp_python begin - (^|\G)\s*([`~]{3,})\s*(re)\s*$ + (^|\G)\s*(([`~]){3,})\s*(re)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -1090,11 +1090,11 @@ fenced_code_block_shell begin - (^|\G)\s*([`~]{3,})\s*(shell|sh|bash|zsh|bashrc|bash_profile|bash_login|profile|bash_logout|.textmate_init)\s*$ + (^|\G)\s*(([`~]){3,})\s*(shell|sh|bash|zsh|bashrc|bash_profile|bash_login|profile|bash_logout|.textmate_init)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -1106,11 +1106,11 @@ fenced_code_block_ts begin - (^|\G)\s*([`~]{3,})\s*(typescript|ts)\s*$ + (^|\G)\s*(([`~]){3,})\s*(typescript|ts)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -1122,11 +1122,11 @@ fenced_code_block_tsx begin - (^|\G)\s*([`~]{3,})\s*(tsx)\s*$ + (^|\G)\s*(([`~]){3,})\s*(tsx)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)[ ]{0,3}(\2)\s*\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns @@ -1138,11 +1138,11 @@ fenced_code_block_csharp begin - (^|\G)\s*([`~]{3,})\s*(cs|csharp|c#)\s*$ + (^|\G)\s*(([`~]){3,})\s*(cs|csharp|c#)\s*$ name markup.fenced_code.block.markdown - end - (^|\G)(\2)\n + while + (^|\G)(?!\s*\2\3*\s*$) patterns -- GitLab