commit adea4eec23e155cdd58a4df7fbb7ddaba6c9fdfc from: Omar Polo date: Fri Jul 16 17:19:35 2021 UTC handle unknown protocols gracefully commit - 0b442ded38304c66eae70d68bdb0a9a4e7315017 commit + adea4eec23e155cdd58a4df7fbb7ddaba6c9fdfc blob - d5a211436ecc7465cc57cb8f91d0e65308fa9347 blob + bf8b8b940ded5a9503b84a05128611eb8b13b52f --- ChangeLog +++ ChangeLog @@ -1,5 +1,7 @@ 2021-07-16 Omar Polo + * telescope.c (do_load_url): handle unknown protocols gracefully + * defaults.c (load_default_keys): bind [ to tab-previous (load_default_keys): bind ] to tab-next blob - fdd2f730afb85fdf3d92826d6a126a5ec2bfb8ef blob + 4fbb7ad31452beaf72937646a2d981c2597607c9 --- pages.c +++ pages.c @@ -139,6 +139,7 @@ const char *err_pages[70] = { [TOO_MUCH_REDIRECTS] = "# Too much redirects\n", [MALFORMED_RESPONSE] = "# Got a malformed response\n", [UNKNOWN_TYPE_OR_CSET] = "# Unsupported type or charset\n", + [UNKNOWN_PROTOCOL] = "# Unknown protocol\n", [10] = "# Input required\n", [11] = "# Input required\n", blob - d4cf3bdd308e7d2ca99b125c7100d4d982f74c00 blob + afae4746c7c58920c3d9d4b0b9727ab7494656fc --- pages.h +++ pages.h @@ -26,6 +26,7 @@ extern const char *about_new; #define TOO_MUCH_REDIRECTS 1 #define MALFORMED_RESPONSE 2 #define UNKNOWN_TYPE_OR_CSET 3 +#define UNKNOWN_PROTOCOL 4 extern const char *err_pages[70]; #endif blob - 11c9d552b44915fbbf3dea7bd236a14ef65d4c89 blob + 66c68f7af41101d93be01adda679992b77bec1af --- telescope.c +++ telescope.c @@ -60,7 +60,7 @@ static void handle_imsg_save_cert_ok(struct imsg*, s static void handle_imsg_update_cert_ok(struct imsg *, size_t); static void handle_dispatch_imsg(int, short, void*); static void load_page_from_str(struct tab*, const char*); -static void do_load_url(struct tab*, const char*); +static int do_load_url(struct tab*, const char*); static pid_t start_child(enum telescope_process, const char *, int); static int ui_send_net(int, uint32_t, const void *, uint16_t); static int ui_send_fs(int, uint32_t, const void *, uint16_t); @@ -552,7 +552,14 @@ load_via_proxy(struct tab *tab, const char *url, struc &req, sizeof(req)); } -static void +/* + * Effectively load the given url in the given tab. Return 1 when + * loading the page asynchronously, and thus when an erase_buffer can + * be done right after this function return, or 0 when loading the + * page synchronously. In this last case, erase_buffer *MUST* be + * called by the handling function (such as load_page_from_str). + */ +static int do_load_url(struct tab *tab, const char *url) { struct phos_uri uri; @@ -579,7 +586,7 @@ do_load_url(struct tab *tab, const char *url) strlcpy(tab->hist_cur->h, url, sizeof(tab->hist_cur->h)); load_page_from_str(tab, t); free(t); - return; + return 0; } phos_serialize_uri(&tab->uri, tab->hist_cur->h, @@ -588,18 +595,19 @@ do_load_url(struct tab *tab, const char *url) for (p = protos; p->schema != NULL; ++p) { if (!strcmp(tab->uri.scheme, p->schema)) { p->loadfn(tab, url); - return; + return 1; } } TAILQ_FOREACH(proxy, &proxies, proxies) { if (!strcmp(tab->uri.scheme, proxy->match_proto)) { load_via_proxy(tab, url, proxy); - return; + return 1; } } - protos[0].loadfn(tab, url); + load_page_from_str(tab, err_pages[UNKNOWN_PROTOCOL]); + return 0; } void @@ -614,8 +622,8 @@ load_url(struct tab *tab, const char *url) } hist_push(&tab->hist, tab->hist_cur); - do_load_url(tab, url); - erase_buffer(&tab->buffer); + if (do_load_url(tab, url)) + erase_buffer(&tab->buffer); } int