From 255e5d7ff42995c27980abc2c060c85afeb6cab3 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Tue, 15 Jun 2021 23:33:40 -0400 Subject: [PATCH] Fix crash when parsing invalid URLs --- GeminiFormat/GeminiParser.swift | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/GeminiFormat/GeminiParser.swift b/GeminiFormat/GeminiParser.swift index df169ed..029af47 100644 --- a/GeminiFormat/GeminiParser.swift +++ b/GeminiFormat/GeminiParser.swift @@ -44,8 +44,6 @@ public struct GeminiParser { // URL(string:relativeTo:) does not handle // meaning the same protocol as the base URL urlString = baseURL.scheme! + ":" + urlString } - // todo: if the URL initializer fails, should there be a .link line with a nil URL? - let url = URL(string: urlString, relativeTo: baseURL)!.absoluteURL let text: String? if textStart < line.endIndex { @@ -54,7 +52,18 @@ public struct GeminiParser { text = nil } - doc.lines.append(.link(url, text: text)) + if let url = URL(string: urlString, relativeTo: baseURL)?.absoluteURL { + doc.lines.append(.link(url, text: text)) + } else { + let str: String + if let text = text { + // todo: localize me? + str = "\(text): \(urlString)" + } else { + str = urlString + } + doc.lines.append(.text(str)) + } } else if line.starts(with: "#") { let level: Document.HeadingLevel if line.starts(with: "###") {