commit - 0b442ded38304c66eae70d68bdb0a9a4e7315017
commit + adea4eec23e155cdd58a4df7fbb7ddaba6c9fdfc
blob - d5a211436ecc7465cc57cb8f91d0e65308fa9347
blob + bf8b8b940ded5a9503b84a05128611eb8b13b52f
--- ChangeLog
+++ ChangeLog
2021-07-16 Omar Polo <op@omarpolo.com>
+ * 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
[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
#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
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);
&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;
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,
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
}
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