mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Update to bluemonday-1.0.6 (#15294)
Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		
							
								
								
									
										22
									
								
								vendor/github.com/chris-ramon/douceur/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/chris-ramon/douceur/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,22 +0,0 @@
 | 
			
		||||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2015 Aymerick JEHANNE
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
SOFTWARE.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								vendor/github.com/microcosm-cc/bluemonday/SECURITY.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/microcosm-cc/bluemonday/SECURITY.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
# Security Policy
 | 
			
		||||
 | 
			
		||||
## Supported Versions
 | 
			
		||||
 | 
			
		||||
Latest tag and tip are supported.
 | 
			
		||||
 | 
			
		||||
Older tags remain present but changes result in new tags and are not back ported... please verify any issue against the latest tag and tip.
 | 
			
		||||
 | 
			
		||||
## Reporting a Vulnerability
 | 
			
		||||
 | 
			
		||||
Email: <bluemonday@buro9.com>
 | 
			
		||||
 | 
			
		||||
Bluemonday is pure OSS and not maintained by a company. As such there is no bug bounty program but security issues will be taken seriously and resolved as soon as possible.
 | 
			
		||||
 | 
			
		||||
The maintainer lives in the United Kingdom and whilst the email is monitored expect a reply or ACK when the maintainer is awake.
 | 
			
		||||
							
								
								
									
										7
									
								
								vendor/github.com/microcosm-cc/bluemonday/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/github.com/microcosm-cc/bluemonday/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,10 +1,9 @@
 | 
			
		||||
module github.com/microcosm-cc/bluemonday
 | 
			
		||||
 | 
			
		||||
go 1.9
 | 
			
		||||
go 1.16
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/aymerick/douceur v0.2.0 // indirect
 | 
			
		||||
	github.com/chris-ramon/douceur v0.2.0
 | 
			
		||||
	github.com/aymerick/douceur v0.2.0
 | 
			
		||||
	github.com/gorilla/css v1.0.0 // indirect
 | 
			
		||||
	golang.org/x/net v0.0.0-20181220203305-927f97764cc3
 | 
			
		||||
	golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								vendor/github.com/microcosm-cc/bluemonday/go.sum
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/microcosm-cc/bluemonday/go.sum
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,8 +1,11 @@
 | 
			
		||||
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
 | 
			
		||||
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
 | 
			
		||||
github.com/chris-ramon/douceur v0.2.0 h1:IDMEdxlEUUBYBKE4z/mJnFyVXox+MjuEVDJNN27glkU=
 | 
			
		||||
github.com/chris-ramon/douceur v0.2.0/go.mod h1:wDW5xjJdeoMm1mRt4sD4c/LbF/mWdEpRXQKjTR8nIBE=
 | 
			
		||||
github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
 | 
			
		||||
github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
 | 
			
		||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis=
 | 
			
		||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
			
		||||
golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c h1:KHUzaHIpjWVlVVNh65G3hhuj3KB1HnjY6Cq5cTvRQT8=
 | 
			
		||||
golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 | 
			
		||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
			
		||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/microcosm-cc/bluemonday/handlers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/microcosm-cc/bluemonday/handlers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -26,6 +26,7 @@
 | 
			
		||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package bluemonday
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								vendor/github.com/microcosm-cc/bluemonday/policy.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								vendor/github.com/microcosm-cc/bluemonday/policy.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -69,6 +69,9 @@ type Policy struct {
 | 
			
		||||
	// Will skip for href="/foo" or href="foo"
 | 
			
		||||
	requireNoReferrerFullyQualifiedLinks bool
 | 
			
		||||
 | 
			
		||||
	// When true, add crossorigin="anonymous" to HTML audio, img, link, script, and video tags
 | 
			
		||||
	requireCrossOriginAnonymous bool
 | 
			
		||||
 | 
			
		||||
	// When true add target="_blank" to fully qualified links
 | 
			
		||||
	// Will add for href="http://foo"
 | 
			
		||||
	// Will skip for href="/foo" or href="foo"
 | 
			
		||||
@@ -433,25 +436,25 @@ func (spb *stylePolicyBuilder) OnElements(elements ...string) *Policy {
 | 
			
		||||
// and return the updated policy
 | 
			
		||||
func (spb *stylePolicyBuilder) OnElementsMatching(regex *regexp.Regexp) *Policy {
 | 
			
		||||
 | 
			
		||||
		for _, attr := range spb.propertyNames {
 | 
			
		||||
	for _, attr := range spb.propertyNames {
 | 
			
		||||
 | 
			
		||||
			if _, ok := spb.p.elsMatchingAndStyles[regex]; !ok {
 | 
			
		||||
				spb.p.elsMatchingAndStyles[regex] = make(map[string]stylePolicy)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			sp := stylePolicy{}
 | 
			
		||||
			if spb.handler != nil {
 | 
			
		||||
				sp.handler = spb.handler
 | 
			
		||||
			} else if len(spb.enum) > 0 {
 | 
			
		||||
				sp.enum = spb.enum
 | 
			
		||||
			} else if spb.regexp != nil {
 | 
			
		||||
				sp.regexp = spb.regexp
 | 
			
		||||
			} else {
 | 
			
		||||
				sp.handler = getDefaultHandler(attr)
 | 
			
		||||
			}
 | 
			
		||||
			spb.p.elsMatchingAndStyles[regex][attr] = sp
 | 
			
		||||
		if _, ok := spb.p.elsMatchingAndStyles[regex]; !ok {
 | 
			
		||||
			spb.p.elsMatchingAndStyles[regex] = make(map[string]stylePolicy)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		sp := stylePolicy{}
 | 
			
		||||
		if spb.handler != nil {
 | 
			
		||||
			sp.handler = spb.handler
 | 
			
		||||
		} else if len(spb.enum) > 0 {
 | 
			
		||||
			sp.enum = spb.enum
 | 
			
		||||
		} else if spb.regexp != nil {
 | 
			
		||||
			sp.regexp = spb.regexp
 | 
			
		||||
		} else {
 | 
			
		||||
			sp.handler = getDefaultHandler(attr)
 | 
			
		||||
		}
 | 
			
		||||
		spb.p.elsMatchingAndStyles[regex][attr] = sp
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return spb.p
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -558,6 +561,16 @@ func (p *Policy) RequireNoReferrerOnFullyQualifiedLinks(require bool) *Policy {
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RequireCrossOriginAnonymous will result in all audio, img, link, script, and
 | 
			
		||||
// video tags having a crossorigin="anonymous" added to them if one does not
 | 
			
		||||
// already exist
 | 
			
		||||
func (p *Policy) RequireCrossOriginAnonymous(require bool) *Policy {
 | 
			
		||||
 | 
			
		||||
	p.requireCrossOriginAnonymous = require
 | 
			
		||||
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AddTargetBlankToFullyQualifiedLinks will result in all a, area and link tags
 | 
			
		||||
// that point to a non-local destination (i.e. starts with a protocol and has a
 | 
			
		||||
// host) having a target="_blank" added to them if one does not already exist
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										52
									
								
								vendor/github.com/microcosm-cc/bluemonday/sanitize.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								vendor/github.com/microcosm-cc/bluemonday/sanitize.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -39,7 +39,7 @@ import (
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/net/html"
 | 
			
		||||
 | 
			
		||||
	cssparser "github.com/chris-ramon/douceur/parser"
 | 
			
		||||
	"github.com/aymerick/douceur/parser"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@@ -286,7 +286,7 @@ func (p *Policy) sanitize(r io.Reader) *bytes.Buffer {
 | 
			
		||||
 | 
			
		||||
		case html.StartTagToken:
 | 
			
		||||
 | 
			
		||||
			mostRecentlyStartedToken = strings.ToLower(token.Data)
 | 
			
		||||
			mostRecentlyStartedToken = normaliseElementName(token.Data)
 | 
			
		||||
 | 
			
		||||
			aps, ok := p.elsAndAttrs[token.Data]
 | 
			
		||||
			if !ok {
 | 
			
		||||
@@ -329,7 +329,7 @@ func (p *Policy) sanitize(r io.Reader) *bytes.Buffer {
 | 
			
		||||
 | 
			
		||||
		case html.EndTagToken:
 | 
			
		||||
 | 
			
		||||
			if mostRecentlyStartedToken == strings.ToLower(token.Data) {
 | 
			
		||||
			if mostRecentlyStartedToken == normaliseElementName(token.Data) {
 | 
			
		||||
				mostRecentlyStartedToken = ""
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
@@ -407,11 +407,11 @@ func (p *Policy) sanitize(r io.Reader) *bytes.Buffer {
 | 
			
		||||
 | 
			
		||||
			if !skipElementContent {
 | 
			
		||||
				switch mostRecentlyStartedToken {
 | 
			
		||||
				case "script":
 | 
			
		||||
				case `script`:
 | 
			
		||||
					// not encouraged, but if a policy allows JavaScript we
 | 
			
		||||
					// should not HTML escape it as that would break the output
 | 
			
		||||
					buff.WriteString(token.Data)
 | 
			
		||||
				case "style":
 | 
			
		||||
				case `style`:
 | 
			
		||||
					// not encouraged, but if a policy allows CSS styles we
 | 
			
		||||
					// should not HTML escape it as that would break the output
 | 
			
		||||
					buff.WriteString(token.Data)
 | 
			
		||||
@@ -721,6 +721,26 @@ func (p *Policy) sanitizeAttrs(
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if p.requireCrossOriginAnonymous && len(cleanAttrs) > 0 {
 | 
			
		||||
		switch elementName {
 | 
			
		||||
		case "audio", "img", "link", "script", "video":
 | 
			
		||||
			var crossOriginFound bool
 | 
			
		||||
			for _, htmlAttr := range cleanAttrs {
 | 
			
		||||
				if htmlAttr.Key == "crossorigin" {
 | 
			
		||||
					crossOriginFound = true
 | 
			
		||||
					htmlAttr.Val = "anonymous"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if !crossOriginFound {
 | 
			
		||||
				crossOrigin := html.Attribute{}
 | 
			
		||||
				crossOrigin.Key = "crossorigin"
 | 
			
		||||
				crossOrigin.Val = "anonymous"
 | 
			
		||||
				cleanAttrs = append(cleanAttrs, crossOrigin)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return cleanAttrs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -744,7 +764,7 @@ func (p *Policy) sanitizeStyles(attr html.Attribute, elementName string) html.At
 | 
			
		||||
	if len(attr.Val) > 0 && attr.Val[len(attr.Val)-1] != ';' {
 | 
			
		||||
		attr.Val = attr.Val + ";"
 | 
			
		||||
	}
 | 
			
		||||
	decs, err := cssparser.ParseDeclarations(attr.Val)
 | 
			
		||||
	decs, err := parser.ParseDeclarations(attr.Val)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		attr.Val = ""
 | 
			
		||||
		return attr
 | 
			
		||||
@@ -944,3 +964,23 @@ func (p *Policy) matchRegex(elementName string) (map[string]attrPolicy, bool) {
 | 
			
		||||
	}
 | 
			
		||||
	return aps, matched
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// normaliseElementName takes a HTML element like <script> which is user input
 | 
			
		||||
// and returns a lower case version of it that is immune to UTF-8 to ASCII
 | 
			
		||||
// conversion tricks (like the use of upper case cyrillic i scrİpt which a
 | 
			
		||||
// strings.ToLower would convert to script). Instead this func will preserve
 | 
			
		||||
// all non-ASCII as their escaped equivalent, i.e. \u0130 which reveals the
 | 
			
		||||
// characters when lower cased
 | 
			
		||||
func normaliseElementName(str string) string {
 | 
			
		||||
	// that useful QuoteToASCII put quote marks at the start and end
 | 
			
		||||
	// so those are trimmed off
 | 
			
		||||
	return strings.TrimSuffix(
 | 
			
		||||
		strings.TrimPrefix(
 | 
			
		||||
			strings.ToLower(
 | 
			
		||||
				strconv.QuoteToASCII(str),
 | 
			
		||||
			),
 | 
			
		||||
			`"`),
 | 
			
		||||
		`"`,
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user