// Copyright 2017 The Gitea Authors. All rights reserved. // Copyright 2017 The Gogs Authors. All rights reserved. // SPDX-License-Identifier: MIT package markup import ( "html/template" "strings" "testing" "github.com/stretchr/testify/assert" ) func Test_Sanitizer(t *testing.T) { NewSanitizer() testCases := []string{ // Regular `Google`, `Google`, // Code highlighting class ``, ``, ``, ``, ``, ``, // Input checkbox ``, ``, ``, ``, ``, ``, // Code highlight injection ``, ``, `   Hello there! Something has gone wrong, we are working on it. In the meantime, play a game with us at example.com. `, "\n\u00a0\n\nHello there! Something has gone wrong, we are working on it.\nIn the meantime, play a game with us at\u00a0example.com.\n", // tags `Ctrl + C`, `Ctrl + C`, `NAUGHTY`, `NAUGHTY`, ``, ``, `unchecked`, `unchecked`, `NAUGHTY`, `NAUGHTY`, `contents`, `contents`, // Color property `Hello World`, `Hello World`, `

Hello World

`, `

Hello World

`, `
TH1TH2TH3
TD1TD2TD3
`, `
TH1TH2TH3
TD1TD2TD3
`, `Hello World`, `Hello World`, `Hello World`, `Hello World`, `Hello World`, `Hello World`, `

Hello World

`, `

Hello World

`, `Hello World`, `Hello World`, // Org mode status of list items. `
  • `, `
  • `, `
  • `, `
  • `, `
  • `, `
  • `, // URLs `my custom URL scheme`, `my custom URL scheme`, `my custom URL scheme`, `my custom URL scheme`, // Disallow dangerous url schemes `bad`, `bad`, `bad`, `bad`, `bad`, `bad`, // Mention `@forgejo/UI`, `@forgejo/UI`, // Emoji `THUMBS UP`, `THUMBS UP`, `THUMBS UP`, `THUMBS UP`, } for i := 0; i < len(testCases); i += 2 { assert.Equal(t, testCases[i+1], Sanitize(testCases[i])) } } func TestDescriptionSanitizer(t *testing.T) { NewSanitizer() testCases := []string{ `

    Title

    `, `Title`, `image`, ``, `THUMBS UP`, `THUMBS UP`, `Hello World`, `Hello World`, `
    `, ``, `https://example.com`, `https://example.com`, `Important!`, `Important!`, `
    Click me! Nothing to see here.
    `, `Click me! Nothing to see here.`, ``, ``, `I have a strong opinion about this.`, `I have a strong opinion about this.`, `Provides alternative wg(8) tool`, `Provides alternative wg(8) tool`, `Click me.`, `Click me.`, `Click me.`, `Click me.`, `Click me.`, `Click me.`, } for i := 0; i < len(testCases); i += 2 { assert.Equal(t, testCases[i+1], SanitizeDescription(testCases[i])) } } func TestSanitizeNonEscape(t *testing.T) { descStr := "<script>alert(document.domain)</script>" output := template.HTML(Sanitize(descStr)) if strings.Contains(string(output), "