Normalize IDN host allowlist entries
This commit is contained in:
parent
7cc94ffa29
commit
1d5be22820
2 changed files with 14 additions and 1 deletions
|
|
@ -239,7 +239,15 @@ enum BrowserInsecureHTTPSettings {
|
|||
|
||||
private static func trimHost(_ raw: String) -> String? {
|
||||
let trimmed = raw.trimmingCharacters(in: CharacterSet(charactersIn: "."))
|
||||
return trimmed.isEmpty ? nil : trimmed
|
||||
guard !trimmed.isEmpty else { return nil }
|
||||
|
||||
// Canonicalize IDN entries (e.g. bücher.example -> xn--bcher-kva.example)
|
||||
// so user-entered allowlist patterns compare against URL.host consistently.
|
||||
if let canonicalized = URL(string: "https://\(trimmed)")?.host {
|
||||
return canonicalized
|
||||
}
|
||||
|
||||
return trimmed
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2960,4 +2960,9 @@ final class BrowserHostWhitelistTests: XCTestCase {
|
|||
defaults.set("http://\n*.\n", forKey: BrowserLinkOpenSettings.browserHostWhitelistKey)
|
||||
XCTAssertFalse(BrowserLinkOpenSettings.hostMatchesWhitelist("example.com", defaults: defaults))
|
||||
}
|
||||
|
||||
func testUnicodeWhitelistEntryMatchesPunycodeHost() {
|
||||
defaults.set("b\\u{00FC}cher.example", forKey: BrowserLinkOpenSettings.browserHostWhitelistKey)
|
||||
XCTAssertTrue(BrowserLinkOpenSettings.hostMatchesWhitelist("xn--bcher-kva.example", defaults: defaults))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue