From e35ff9bcddd7819b5110cfeb9acf2e727063090e Mon Sep 17 00:00:00 2001 From: defanor Date: Mon, 6 Jan 2020 04:00:52 +0300 Subject: Check web page headers Don't try to render non-(X)HTML documents. --- src/browserbox.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/browserbox.c b/src/browserbox.c index dd3a043..595afb3 100644 --- a/src/browserbox.c +++ b/src/browserbox.c @@ -1296,7 +1296,6 @@ void got_headers(SoupMessage *msg, gpointer ptr) { BrowserBox *bb = ptr; browser_box_set_status(bb, "Got headers"); - /* todo: check content type, don't assume HTML */ if (bb->builder_state != NULL) { if (bb->builder_state->docbox != NULL) { gtk_widget_destroy(GTK_WIDGET(bb->builder_state->docbox)); @@ -1308,6 +1307,18 @@ void got_headers(SoupMessage *msg, gpointer ptr) char *uri_str = soup_uri_to_string(bb->builder_state->uri, FALSE); gtk_entry_set_text(GTK_ENTRY(bb->address_bar), uri_str); free(uri_str); + + SoupMessageHeaders *smh; + g_object_get(msg, + "response-headers", &smh, + NULL); + const char *ct = soup_message_headers_get_content_type(smh, NULL); + if (! (strcmp(ct, "text/html") == 0 || + strcmp(ct, "application/xhtml+xml") == 0)) { + browser_box_set_status(bb, "Unsupported content type"); + /* todo: offer to download a file */ + bb->builder_state->active = FALSE; + } } void document_request_sm (BrowserBox *bb, SoupMessage *sm) -- cgit v1.2.3