diff --git a/parser/html/nsHtml5Highlighter.cpp b/parser/html/nsHtml5Highlighter.cpp index d55b0e22afb..e8107577234 100644 --- a/parser/html/nsHtml5Highlighter.cpp +++ b/parser/html/nsHtml5Highlighter.cpp @@ -163,9 +163,7 @@ nsHtml5Highlighter::Transition(PRInt32 aState, bool aReconsume, PRInt32 aPos) StartSpan(); mAmpersand = CurrentNode(); } else { - EndCharacters(); - StartSpan(); - mCurrentRun = CurrentNode(); + EndCharactersAndStartMarkupRun(); } break; case NS_HTML5TOKENIZER_TAG_OPEN: @@ -413,6 +411,8 @@ nsHtml5Highlighter::Transition(PRInt32 aState, bool aReconsume, PRInt32 aPos) case NS_HTML5TOKENIZER_SCRIPT_DATA_LESS_THAN_SIGN: case NS_HTML5TOKENIZER_SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: if (aState == NS_HTML5TOKENIZER_NON_DATA_END_TAG_NAME) { + FlushCurrent(); + StartSpan(); // don't know if it is "end-tag" yet :-( break; } FinishTag(); @@ -421,8 +421,7 @@ nsHtml5Highlighter::Transition(PRInt32 aState, bool aReconsume, PRInt32 aPos) case NS_HTML5TOKENIZER_SCRIPT_DATA_ESCAPED: case NS_HTML5TOKENIZER_SCRIPT_DATA_ESCAPED_DASH: if (aState == NS_HTML5TOKENIZER_SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN) { - EndCharacters(); - StartSpan(); + EndCharactersAndStartMarkupRun(); } break; // Lots of double escape states omitted, because they don't highlight. @@ -555,12 +554,15 @@ nsHtml5Highlighter::StartCharacters() } void -nsHtml5Highlighter::EndCharacters() +nsHtml5Highlighter::EndCharactersAndStartMarkupRun() { NS_PRECONDITION(mInCharacters, "Not in characters!"); FlushChars(); Pop(); mInCharacters = false; + // Now start markup run + StartSpan(); + mCurrentRun = CurrentNode(); } void diff --git a/parser/html/nsHtml5Highlighter.h b/parser/html/nsHtml5Highlighter.h index a3308a3369f..f612117ffdf 100644 --- a/parser/html/nsHtml5Highlighter.h +++ b/parser/html/nsHtml5Highlighter.h @@ -204,7 +204,7 @@ class nsHtml5Highlighter /** * Ends a wrapper around a run of characters. */ - void EndCharacters(); + void EndCharactersAndStartMarkupRun(); /** * Starts an . diff --git a/parser/htmlparser/tests/crashtests/742414-1.html b/parser/htmlparser/tests/crashtests/742414-1.html new file mode 100644 index 00000000000..e35b1256035 --- /dev/null +++ b/parser/htmlparser/tests/crashtests/742414-1.html @@ -0,0 +1,4 @@ + diff --git a/parser/htmlparser/tests/crashtests/crashtests.list b/parser/htmlparser/tests/crashtests/crashtests.list index 89004c600f1..a59b176157c 100644 --- a/parser/htmlparser/tests/crashtests/crashtests.list +++ b/parser/htmlparser/tests/crashtests/crashtests.list @@ -50,3 +50,4 @@ load 650501-1.xhtml load 696651-1.html load view-source:699347-1.xml load 721313-1.html +load view-source:742414-1.html diff --git a/parser/htmlparser/tests/reftest/bug482921-1-ref.html b/parser/htmlparser/tests/reftest/bug482921-1-ref.html index 72c546e7b9d..2d23b31c7f0 100644 --- a/parser/htmlparser/tests/reftest/bug482921-1-ref.html +++ b/parser/htmlparser/tests/reftest/bug482921-1-ref.html @@ -7,7 +7,7 @@ <!-- var s = "<script>foo</script>"; --> -</script><!-- Not quite optimal highlight there. --> +</script><!-- Comment. --> <style> /* </foo> */ </style> diff --git a/parser/htmlparser/tests/reftest/bug482921-1.html b/parser/htmlparser/tests/reftest/bug482921-1.html index f42b888ea21..ca603844f24 100644 --- a/parser/htmlparser/tests/reftest/bug482921-1.html +++ b/parser/htmlparser/tests/reftest/bug482921-1.html @@ -7,7 +7,7 @@ var lt = "<"; - + diff --git a/parser/htmlparser/tests/reftest/bug731234-1-ref.html b/parser/htmlparser/tests/reftest/bug731234-1-ref.html new file mode 100644 index 00000000000..f20ae4d654d --- /dev/null +++ b/parser/htmlparser/tests/reftest/bug731234-1-ref.html @@ -0,0 +1,30 @@ +
<!DOCTYPE html>
+<body>
+<script></script>X
+<script></script >X
+<script></script
+>X
+<script></script foo>X
+<script></script foo=bar>X
+<script></script foo="bar">X
+<script><!--</script>X
+<script><!-- </script>X
+<script><!-- </script >X
+<script><!-- </script
+>X
+<script><!-- </script foo>X
+<script><!-- </script foo=bar>X
+<script><!-- </script foo="bar">X
+<script><!-- -</script>X
+<script><!-- --</script>X
+<script><!-- --></script>X
+<script><!--<script> </script> </script>X
+<script><!--<script> </script> --></script>X
+<script><!--<script </script> --></script>X
+<script><!--<script> </script  > --></script>X
+<script><!--<script> </script  foo> --></script>X
+<script><!--<script> </script  foo=bar> --></script>X
+<script><!--<script> </script  foo="bar"> --></script>X
+
+
+ diff --git a/parser/htmlparser/tests/reftest/bug731234-1.html b/parser/htmlparser/tests/reftest/bug731234-1.html new file mode 100644 index 00000000000..313e44cca73 --- /dev/null +++ b/parser/htmlparser/tests/reftest/bug731234-1.html @@ -0,0 +1,27 @@ + + +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X diff --git a/parser/htmlparser/tests/reftest/reftest.list b/parser/htmlparser/tests/reftest/reftest.list index 2b13cd63678..21a7a24672e 100644 --- a/parser/htmlparser/tests/reftest/reftest.list +++ b/parser/htmlparser/tests/reftest/reftest.list @@ -19,3 +19,4 @@ fails-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated) == vi == bug696651-2.html bug696651-2-ref.html == view-source:bug700260-1.html view-source:bug700260-1-ref.html == view-source:bug704667-1.html bug704667-1-ref.html +== view-source:bug731234-1.html bug731234-1-ref.html