Merge pull request #6759 from vector-im/aringenbach/6748_fix_percent_encoding_and_markdown

Fix render of links with both characters requiring percent encoding and markdown-like syntax
This commit is contained in:
aringenbach 2022-09-23 16:27:58 +02:00 committed by GitHub
commit b5184faa4a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 2 deletions

View file

@ -166,10 +166,11 @@ private extension CMarkNode {
private extension String { private extension String {
/// Returns array of URLs detected inside the String. /// Returns array of URLs detected inside the String.
var containedUrls: [NSTextCheckingResult] { var containedUrls: [NSTextCheckingResult] {
guard let detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) else { guard let detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue),
let percentEncoded = self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) else {
return [] return []
} }
return detector.matches(in: self, options: [], range: NSRange(location: 0, length: self.utf16.count)) return detector.matches(in: percentEncoded, options: [], range: NSRange(location: 0, length: percentEncoded.utf16.count))
} }
} }

View file

@ -112,6 +112,20 @@ final class MarkdownToHTMLRendererTests: XCTestCase {
testRenderHTML(input: input, expectedOutput: expectedOutput) testRenderHTML(input: input, expectedOutput: expectedOutput)
} }
func testRenderRepairedLinksWithCharactersRequiringPercentEncoding() {
let input = "Some link with special characters: "
+ "https://matrix.to/#/#_oftc_#matrix-dev:matrix.org"
+ " "
+ "https://matrix.to/#/#?=+-_#_"
+ "\n"
let expectedOutput = "<p>Some link with special characters: "
+ "https://matrix.to/#/#_oftc_#matrix-dev:matrix.org"
+ " "
+ "https://matrix.to/#/#?=+-_#_</p>"
+ "\n"
testRenderHTML(input: input, expectedOutput: expectedOutput)
}
/// Test links inside codeblocks. /// Test links inside codeblocks.
func testRenderLinksInCodeblock() { func testRenderLinksInCodeblock() {
let input = "```" let input = "```"

1
changelog.d/6748.bugfix Normal file
View file

@ -0,0 +1 @@
Fix render of links with both characters requiring percent encoding and markdown-like syntax