From 6db875ad996e272b42a84dc1fda59ec532150058 Mon Sep 17 00:00:00 2001 From: cage Date: Sat, 25 May 2024 13:04:10 +0200 Subject: [PATCH] - prevented a crash when the user typed an invalid URL in the address bar. --- src/gui/client/main-window.lisp | 69 +++++++++++++++++---------------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/src/gui/client/main-window.lisp b/src/gui/client/main-window.lisp index c640cd1..5fae43f 100644 --- a/src/gui/client/main-window.lisp +++ b/src/gui/client/main-window.lisp @@ -1033,41 +1033,44 @@ local file paths." (render-line rendered-line)))))))))))) (defun open-iri (iri main-window use-cache &key (status +stream-status-streaming+)) - (let ((actual-iri (remove-standard-port iri))) - (handler-case - (let ((parsed-iri (iri:iri-parse actual-iri))) - (cond - ((string= (uri:scheme parsed-iri) +internal-scheme-view-source+) - (setf (uri:scheme parsed-iri) gemini-constants:+gemini-scheme+) - (start-stream-iri (iri-ensure-path (to-s parsed-iri)) + (handler-case + (let* ((actual-iri (remove-standard-port iri)) + (parsed-iri (iri:iri-parse actual-iri))) + (cond + ((string= (uri:scheme parsed-iri) +internal-scheme-view-source+) + (setf (uri:scheme parsed-iri) gemini-constants:+gemini-scheme+) + (start-stream-iri (iri-ensure-path (to-s parsed-iri)) + main-window + use-cache + :status status + :process-iri-lines-function (collect-source-lines-clsr main-window))) + ((iri:iri= actual-iri (internal-iri-bookmark)) + (initialize-ir-lines main-window) + (funcall (menu:show-bookmarks-clsr main-window))) + ((iri:iri= actual-iri (internal-iri-gemlogs)) + (menu:manage-gemlogs)) + ((gemini-client:absolute-titan-url-p actual-iri) + (client-titan-window:init-window main-window actual-iri)) + ((gemini-parser:gemini-iri-p actual-iri) + (let ((stream-frame (stream-frame main-window))) + (start-stream-iri (iri-ensure-path actual-iri) main-window use-cache - :status status - :process-iri-lines-function (collect-source-lines-clsr main-window))) - ((iri:iri= actual-iri (internal-iri-bookmark)) - (initialize-ir-lines main-window) - (funcall (menu:show-bookmarks-clsr main-window))) - ((iri:iri= actual-iri (internal-iri-gemlogs)) - (menu:manage-gemlogs)) - ((gemini-client:absolute-titan-url-p actual-iri) - (client-titan-window:init-window main-window actual-iri)) - ((gemini-parser:gemini-iri-p actual-iri) - (let ((stream-frame (stream-frame main-window))) - (start-stream-iri (iri-ensure-path actual-iri) - main-window - use-cache - :status status) - (client-stream-frame::refresh-all-streams - (client-stream-frame::table stream-frame)))) - ((or (null (uri:scheme parsed-iri)) - (string= (uri:scheme parsed-iri) - constants:+file-scheme+)) - (initialize-ir-lines main-window) - (open-local-path (uri:path parsed-iri) main-window)) - (t - (client-os-utils:open-resource-with-external-program main-window actual-iri)))) - (error (e) - (gui-goodies:notify-request-error e))))) + :status status) + (client-stream-frame::refresh-all-streams + (client-stream-frame::table stream-frame)))) + ((or (null (uri:scheme parsed-iri)) + (string= (uri:scheme parsed-iri) + constants:+file-scheme+)) + (initialize-ir-lines main-window) + (open-local-path (uri:path parsed-iri) main-window)) + (t + (client-os-utils:open-resource-with-external-program main-window actual-iri)))) + (esrap:esrap-parse-error (e) + (declare (ignore e)) + (gui-goodies:notify-request-error (format nil (_ "Invalid address: ~s") iri))) + (error (e) + (gui-goodies:notify-request-error e)))) (defun get-user-request-query (iri meta main-window &key (sensitive nil)) (let* ((parsed-iri (iri:iri-parse iri))