diff --git a/components/script/dom/servoparser/async_html.rs b/components/script/dom/servoparser/async_html.rs index 78b2a800083..f91ed2008ec 100644 --- a/components/script/dom/servoparser/async_html.rs +++ b/components/script/dom/servoparser/async_html.rs @@ -154,7 +154,10 @@ enum FromParserThreadMsg { script: ParseNode, updated_input: VecDeque>, }, - EncodingIndicator(SendTendril), + EncodingIndicator { + encoding: SendTendril, + updated_input: VecDeque>, + }, /// Sent to main thread to signify that the parser thread's end method has returned. End, ProcessOperation(ParseOperation), @@ -338,7 +341,15 @@ impl Tokenizer { let script = self.get_node(&script.id); return TokenizerResult::Script(DomRoot::from_ref(script.downcast().unwrap())); }, - FromParserThreadMsg::EncodingIndicator(_) => continue, + FromParserThreadMsg::EncodingIndicator { updated_input, .. } => { + // We don't handle encoding indicators yet, so just tell the + // parser thread to continue. + self.to_parser_thread_sender + .send(ToParserThreadMsg::Feed { + input: updated_input, + }) + .unwrap(); + }, _ => unreachable!(), }; } @@ -363,11 +374,8 @@ impl Tokenizer { self.process_operation(parse_op, cx); }, FromParserThreadMsg::TokenizerResultDone { updated_input: _ } | - FromParserThreadMsg::TokenizerResultScript { - script: _, - updated_input: _, - } | - FromParserThreadMsg::EncodingIndicator(_) => continue, + FromParserThreadMsg::TokenizerResultScript { .. } | + FromParserThreadMsg::EncodingIndicator { .. } => continue, FromParserThreadMsg::End => return, }; } @@ -692,7 +700,10 @@ fn run( updated_input, }, TokenizerResult::EncodingIndicator(encoding) => { - FromParserThreadMsg::EncodingIndicator(SendTendril::from(encoding)) + FromParserThreadMsg::EncodingIndicator { + encoding: SendTendril::from(encoding), + updated_input, + } }, }; sender.send(res).unwrap(); diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 6fd4ccd678e..e844881b547 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -2,6 +2,13 @@ "items": { "crashtest": { "mozilla": { + "async-html-meta-charset-crash.html": [ + "8743acb152daa256af34bc938f688561abd313c1", + [ + null, + {} + ] + ], "audioContext_createMediaElementSource-crash.html": [ "e70316d3e6d880d8ec9600ff157e81f6047871a4", [ diff --git a/tests/wpt/mozilla/meta/mozilla/async-html-meta-charset-crash.html.ini b/tests/wpt/mozilla/meta/mozilla/async-html-meta-charset-crash.html.ini new file mode 100644 index 00000000000..dd2280a06b5 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/async-html-meta-charset-crash.html.ini @@ -0,0 +1,2 @@ +[async-html-meta-charset-crash.html] + prefs: ["dom_servoparser_async_html_tokenizer_enabled:true"] diff --git a/tests/wpt/mozilla/tests/mozilla/async-html-meta-charset-crash.html b/tests/wpt/mozilla/tests/mozilla/async-html-meta-charset-crash.html new file mode 100644 index 00000000000..8743acb152d --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/async-html-meta-charset-crash.html @@ -0,0 +1,4 @@ + + + +