feat: apply cumulative update to address various issues (#10324)

This commit is contained in:
Vladimír Gorej
2025-02-27 11:12:42 +01:00
committed by GitHub
parent 621a7f0f76
commit 80d56c9518
298 changed files with 11066 additions and 11680 deletions

View File

@@ -20,7 +20,6 @@ import {
escapeDeepLinkPath,
getExtensions,
getCommonExtensions,
sanitizeUrl,
requiresValidationURL,
extractFileNameFromContentDispositionHeader,
deeplyStripKey,
@@ -35,10 +34,11 @@ import {
buildBaseUrl,
buildUrl,
safeBuildUrl,
sanitizeUrl,
} from "core/utils/url"
import win from "core/window"
import { afterAll, beforeAll, expect, jest } from "@jest/globals"
import { afterAll, beforeAll, expect } from "@jest/globals"
describe("utils", () => {
@@ -1301,10 +1301,11 @@ describe("utils", () => {
}
let count = 0
const result = deeplyStripKey(input, "$$ref", () => {
deeplyStripKey(input, "$$ref", () => {
count++
return true
})
expect(count).toEqual(2)
})
})
@@ -1361,27 +1362,91 @@ describe("utils", () => {
describe("sanitizeUrl", () => {
it("should sanitize a `javascript:` url", () => {
const res = sanitizeUrl("javascript:alert('bam!')")
const url = "javascript:alert('bam!')"
expect(res).toEqual("about:blank")
expect(sanitizeUrl(url)).toEqual("about:blank")
})
it("should sanitize a `vbscript:` url", () => {
const url = "vbscript:alert('bam!')"
expect(sanitizeUrl(url)).toEqual("about:blank")
})
it("should sanitize a `data:` url", () => {
const res = sanitizeUrl(`data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=`)
const url = "data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4="
expect(res).toEqual("about:blank")
expect(sanitizeUrl(url)).toEqual("about:blank")
})
it("should not sanitize", () => {
const url1 = "http://swagger.io/path/to:something"
const url2 = "http://swagger.io:4567/path/to:something"
const url3 = "https://example.com:4567/path/to:something"
const url4 = "./path/to/my.json"
const url5 = "path/to/my.json"
const url6 = "swagger.io"
const url7 = "com.braintreepayments.demo://example"
const url8 = "mailto:test@example.com?subject=hello+world"
const url9 = "javascrip%25%32%35%25%33%35%25%34%33rt:alert()"
const url10 = "notjavascript:alert()"
const url11 = "%20javascript:alert()"
expect(sanitizeUrl(url1)).toEqual(url1)
expect(sanitizeUrl(url2)).toEqual(url2)
expect(sanitizeUrl(url3)).toEqual(url3)
expect(sanitizeUrl(url4)).toEqual(url4)
expect(sanitizeUrl(url5)).toEqual(url5)
expect(sanitizeUrl(url6)).toEqual(url6)
expect(sanitizeUrl(url7)).toEqual(url7)
expect(sanitizeUrl(url8)).toEqual(url8)
expect(sanitizeUrl(url9)).toEqual(url9)
expect(sanitizeUrl(url10)).toEqual(url10)
expect(sanitizeUrl(url11)).toEqual(url11)
})
it("should normalize", () => {
const url1 = "//google.com/robots.txt"
const url2 = "www.example.com/with-áccêntš"
const url3 = "www.example.com/лот.рфшишкиü–"
const url4 = " http://example.com/path/to:something "
const url5 = "https://example.com

/something"
const url6 = "http://example.com#javascript:foo"
expect(sanitizeUrl(url1)).toEqual("https://google.com/robots.txt")
expect(sanitizeUrl(url2)).toEqual("www.example.com/with-%C3%A1cc%C3%AAnt%C5%A1")
expect(sanitizeUrl(url3)).toEqual("www.example.com/%D0%BB%D0%BE%D1%82.%D1%80%D1%84%D1%88%D0%B8%D1%88%D0%BA%D0%B8%C3%BC%E2%80%93")
expect(sanitizeUrl(url4)).toEqual("http://example.com/path/to:something")
expect(sanitizeUrl(url5)).toEqual("https://example.com&newline;&newline;/something")
expect(sanitizeUrl(url6)).toEqual("http://example.com/#javascript:foo")
})
it("should sanitize", () => {
const url1 = "www.example.com/\u200D\u0000\u001F\x00\x1F\uFEFFfoo"
const url2 = "javascri\npt:alert('xss')"
const url3 = "\u0000javascript:alert()"
const url4 = "\\j\\av\\a\\s\\cript:alert()"
const url5 = " javascript:alert('xss')"
expect(sanitizeUrl(url1)).toEqual("www.example.com/%E2%80%8D%00%1F%00%1F%EF%BB%BFfoo")
expect(sanitizeUrl(url2)).toEqual("about:blank")
expect(sanitizeUrl(url3)).toEqual("about:blank")
expect(sanitizeUrl(url4)).toEqual("j/av/a/s/cript:alert()")
expect(sanitizeUrl(url5)).toEqual("about:blank")
})
it("should not modify a `http:` url", () => {
const res = sanitizeUrl(`http://swagger.io/`)
const url = "http://swagger.io/"
expect(res).toEqual("http://swagger.io/")
expect(sanitizeUrl(url)).toEqual(url)
})
it("should not modify a `https:` url", () => {
const res = sanitizeUrl(`https://swagger.io/`)
const url = "https://swagger.io/"
expect(res).toEqual("https://swagger.io/")
expect(sanitizeUrl(url)).toEqual("https://swagger.io/")
})
it("should gracefully handle empty strings", () => {
@@ -1712,7 +1777,7 @@ describe("utils", () => {
let res = null
try {
const res = paramToIdentifier(param)
paramToIdentifier(param)
} catch(e) {
error = e
}