diff options
author | Sean McGivern <sean@gitlab.com> | 2018-02-01 16:52:24 +0000 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2018-02-01 11:28:22 -0600 |
commit | fb829ac5f90eb3ebc8f9e63cd1bffb201d82ed39 (patch) | |
tree | 4bd9453c27176ad66daaf7cea3b8cdbadf711bbf | |
parent | 58b66521b4b02746009931655891798568643b80 (diff) | |
download | gitlab-ce-fb829ac5f90eb3ebc8f9e63cd1bffb201d82ed39.tar.gz |
Merge branch 'fix-mermaid-xss-10-3' into 'security-10-3'
[10.3] Fix stored XSS in code blocks
See merge request gitlab/gitlabhq!2317
-rw-r--r-- | app/assets/javascripts/render_mermaid.js | 10 | ||||
-rw-r--r-- | spec/features/issues/spam_issues_spec.rb | 3 | ||||
-rw-r--r-- | spec/features/markdown/copy_as_gfm_spec.rb (renamed from spec/features/copy_as_gfm_spec.rb) | 0 | ||||
-rw-r--r-- | spec/features/markdown/gitlab_flavored_markdown_spec.rb (renamed from spec/features/gitlab_flavored_markdown_spec.rb) | 0 | ||||
-rw-r--r-- | spec/features/markdown/markdown_spec.rb (renamed from spec/features/markdown_spec.rb) | 0 | ||||
-rw-r--r-- | spec/features/markdown/math_spec.rb | 22 | ||||
-rw-r--r-- | spec/features/markdown/mermaid_spec.rb | 24 |
7 files changed, 59 insertions, 0 deletions
diff --git a/app/assets/javascripts/render_mermaid.js b/app/assets/javascripts/render_mermaid.js index 943068cf36d..4cfa0761e12 100644 --- a/app/assets/javascripts/render_mermaid.js +++ b/app/assets/javascripts/render_mermaid.js @@ -28,6 +28,16 @@ export default function renderMermaid($els) { }); $els.each((i, el) => { + // Handle a condition that happens in CI and some of the time locally, + // where the `textContent` is the content of the styles injected by + // Mermaid, as well as any labels. + if (el.querySelector('style')) { return; } + + const source = el.textContent; + + // Remove any extra spans added by the backend syntax highlighting. + Object.assign(el, { textContent: source }); + mermaid.init(undefined, el); }); }).catch((err) => { diff --git a/spec/features/issues/spam_issues_spec.rb b/spec/features/issues/spam_issues_spec.rb index d25231d624c..70af6d37b01 100644 --- a/spec/features/issues/spam_issues_spec.rb +++ b/spec/features/issues/spam_issues_spec.rb @@ -34,6 +34,9 @@ describe 'New issue', :js do click_button 'Submit issue' + # reCAPTCHA alerts when it can't contact the server, so just accept it and move on + page.driver.browser.switch_to.alert.accept + # it is impossible to test recaptcha automatically and there is no possibility to fill in recaptcha # recaptcha verification is skipped in test environment and it always returns true expect(page).not_to have_content('issue title') diff --git a/spec/features/copy_as_gfm_spec.rb b/spec/features/markdown/copy_as_gfm_spec.rb index 1fcb8d5bc67..1fcb8d5bc67 100644 --- a/spec/features/copy_as_gfm_spec.rb +++ b/spec/features/markdown/copy_as_gfm_spec.rb diff --git a/spec/features/gitlab_flavored_markdown_spec.rb b/spec/features/markdown/gitlab_flavored_markdown_spec.rb index 3c2186b3598..3c2186b3598 100644 --- a/spec/features/gitlab_flavored_markdown_spec.rb +++ b/spec/features/markdown/gitlab_flavored_markdown_spec.rb diff --git a/spec/features/markdown_spec.rb b/spec/features/markdown/markdown_spec.rb index e285befc66f..e285befc66f 100644 --- a/spec/features/markdown_spec.rb +++ b/spec/features/markdown/markdown_spec.rb diff --git a/spec/features/markdown/math_spec.rb b/spec/features/markdown/math_spec.rb new file mode 100644 index 00000000000..6a23d6b78ab --- /dev/null +++ b/spec/features/markdown/math_spec.rb @@ -0,0 +1,22 @@ +require 'spec_helper' + +describe 'Math rendering', :js do + it 'renders inline and display math correctly' do + description = <<~MATH + This math is inline $`a^2+b^2=c^2`$. + + This is on a separate line + ```math + a^2+b^2=c^2 + ``` + MATH + + project = create(:project, :public) + issue = create(:issue, project: project, description: description) + + visit project_issue_path(project, issue) + + expect(page).to have_selector('.katex .mord.mathit', text: 'b') + expect(page).to have_selector('.katex-display .mord.mathit', text: 'b') + end +end diff --git a/spec/features/markdown/mermaid_spec.rb b/spec/features/markdown/mermaid_spec.rb new file mode 100644 index 00000000000..a25d701ee35 --- /dev/null +++ b/spec/features/markdown/mermaid_spec.rb @@ -0,0 +1,24 @@ +require 'spec_helper' + +describe 'Mermaid rendering', :js do + it 'renders Mermaid diagrams correctly' do + description = <<~MERMAID + ```mermaid + graph TD; + A-->B; + A-->C; + B-->D; + C-->D; + ``` + MERMAID + + project = create(:project, :public) + issue = create(:issue, project: project, description: description) + + visit project_issue_path(project, issue) + + %w[A B C D].each do |label| + expect(page).to have_selector('svg foreignObject', text: label) + end + end +end |