From 9d8f37ca10c35fea81caa08369c236722ebff9d5 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Mon, 27 Aug 2018 20:47:37 +0100 Subject: HTML: Don't try to finish an HTML document's conversion twice. --- content/handlers/html/html.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/content/handlers/html/html.c b/content/handlers/html/html.c index f721b98ab..62f625f6b 100644 --- a/content/handlers/html/html.c +++ b/content/handlers/html/html.c @@ -585,6 +585,22 @@ void html_finish_conversion(html_content *htmlc) return; } + /* If we already have a selection context, then we have already + * "finished" conversion. We can get here twice if e.g. some JS + * adds a new stylesheet, and the stylesheet gets added after + * the HTML content is initially finished. + * + * If we didn't do this, the HTML content would try to rebuild the + * box tree for the html content when this new stylesheet is ready. + * NetSurf has no concept of dynamically changing documents, so this + * would break badly. + */ + if (htmlc->select_ctx != NULL) { + NSLOG(netsurf, INFO, + "Ignoring style change: NS layout is static."); + return; + } + /* create new css selection context */ error = html_css_new_selection_context(htmlc, &htmlc->select_ctx); if (error != NSERROR_OK) { -- cgit v1.2.3