| <tr>
| <td>
| "Foo"
-
-#data
-<template></figcaption><sub><table></table>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <sub>
-| <table>
-| <body>
-
-#data
-<template><template>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <body>
-
-#data
-<template><div>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <div>
-| <body>
-
-#data
-<template><template><div>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <div>
-| <body>
-
-#data
-<template><template><table>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <table>
-| <body>
-
-#data
-<template><template><tbody>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <tbody>
-| <body>
-
-#data
-<template><template><tr>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <tr>
-| <body>
-
-#data
-<template><template><td>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <td>
-| <body>
-
-#data
-<template><template><caption>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <caption>
-| <body>
-
-#data
-<template><template><colgroup>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <colgroup>
-| <body>
-
-#data
-<template><template><col>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <col>
-| <body>
-
-#data
-<template><template><tbody><select>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <tbody>
-| <select>
-| <body>
-
-#data
-<template><template><table>Foo
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <table>
-| "Foo"
-| <body>
-
-#data
-<template><template><frame>
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <frame>
-| <body>
-
-#data
-<template><template><script>var i
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <script>
-| "var i"
-| <body>
-
-#data
-<template><template><style>var i
-#errors
-#document
-| <html>
-| <head>
-| <template>
-| #document-fragment
-| <template>
-| #document-fragment
-| <style>
-| "var i"
-| <body>
+2013-02-12 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r142531.
+ http://trac.webkit.org/changeset/142531
+ https://bugs.webkit.org/show_bug.cgi?id=109569
+
+ Causes html5lib/run-template layout test to crash. (Requested
+ by atwilson_ on #webkit).
+
+ * html/parser/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processTemplateEndTag):
+ (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
+ (WebCore::HTMLTreeBuilder::processEndOfFile):
+ * html/parser/HTMLTreeBuilder.h:
+ (HTMLTreeBuilder):
+
2013-02-12 Zan Dobersek <zdobersek@igalia.com>
[GTK] Enable CSS image-set support in development builds
m_templateInsertionModes.removeLast();
resetInsertionModeAppropriately();
}
-
-bool HTMLTreeBuilder::popAllTemplatesForEndOfFile()
-{
- if (m_templateInsertionModes.isEmpty())
- return false;
-
- while (!m_templateInsertionModes.isEmpty()) {
- if (m_tree.currentIsRootNode())
- return false;
- if (m_tree.currentNode()->hasTagName(templateTag))
- m_templateInsertionModes.removeLast();
- m_tree.openElements()->pop();
- }
-
- resetInsertionModeAppropriately();
- return true;
-}
#endif
bool HTMLTreeBuilder::processColgroupEndTagForInColumnGroup()
{
- bool ignoreFakeEndTag = m_tree.currentIsRootNode();
-#if ENABLE(TEMPLATE_ELEMENT)
- ignoreFakeEndTag = ignoreFakeEndTag || m_tree.currentNode()->hasTagName(templateTag);
-#endif
-
- if (ignoreFakeEndTag) {
+ if (m_tree.currentIsRootNode() || m_tree.currentNode()->hasTagName(templateTag)) {
ASSERT(isParsingFragmentOrTemplateContents());
// FIXME: parse error
return false;
void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken* token)
{
ASSERT(token->type() == HTMLTokenTypes::EndOfFile);
+#if ENABLE(TEMPLATE_ELEMENT)
+ m_templateInsertionModes.clear();
+#endif
switch (insertionMode()) {
case InitialMode:
ASSERT(insertionMode() == InitialMode);
ASSERT(insertionMode() == InBodyMode || insertionMode() == InCellMode || insertionMode() == InCaptionMode || insertionMode() == InRowMode);
#endif
notImplemented(); // Emit parse error based on what elements are still open.
-#if ENABLE(TEMPLATE_ELEMENT)
- if (popAllTemplatesForEndOfFile()) {
- processEndOfFile(token);
- return;
- }
-#endif
break;
case AfterBodyMode:
case AfterAfterBodyMode:
case AfterAfterFramesetMode:
ASSERT(insertionMode() == AfterFramesetMode || insertionMode() == AfterAfterFramesetMode);
break;
- case InColumnGroupMode:
- if (m_tree.currentIsRootNode()) {
- ASSERT(isParsingFragment());
- return; // FIXME: Should we break here instead of returning?
- }
-#if ENABLE(TEMPLATE_ELEMENT)
- ASSERT(m_tree.currentNode()->hasTagName(colgroupTag));
-#else
- ASSERT(m_tree.currentNode()->hasTagName(colgroupTag) || m_tree.currentNode()->hasTagName(templateTag));
-#endif
- processColgroupEndTagForInColumnGroup();
- // Fall through
case InFramesetMode:
case InTableMode:
case InTableBodyMode:
case InSelectInTableMode:
case InSelectMode:
- ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode || insertionMode() == InTableMode || insertionMode() == InFramesetMode || insertionMode() == InTableBodyMode || insertionMode() == InColumnGroupMode);
+ ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode || insertionMode() == InTableMode || insertionMode() == InFramesetMode || insertionMode() == InTableBodyMode);
if (m_tree.currentNode() != m_tree.openElements()->rootNode())
parseError(token);
-
-#if ENABLE(TEMPLATE_ELEMENT)
- if (popAllTemplatesForEndOfFile()) {
- processEndOfFile(token);
- return;
- }
-#endif
break;
+ case InColumnGroupMode:
+ if (m_tree.currentIsRootNode()) {
+ ASSERT(isParsingFragment());
+ return; // FIXME: Should we break here instead of returning?
+ }
+ if (!processColgroupEndTagForInColumnGroup()) {
+ ASSERT(isParsingFragmentOrTemplateContents());
+ return; // FIXME: Should we break here instead of returning?
+ }
+ processEndOfFile(token);
+ return;
case InTableTextMode:
defaultForInTableText();
processEndOfFile(token);
processEndOfFile(token);
return;
case TemplateContentsMode:
-#if ENABLE(TEMPLATE_ELEMENT)
- parseError(token);
- if (popAllTemplatesForEndOfFile()) {
- processEndOfFile(token);
- return;
+ if (m_tree.currentIsRootNode()) {
+ ASSERT(isParsingFragment());
+ break;
}
- break;
-#else
- ASSERT_NOT_REACHED();
-#endif
+ parseError(token);
+ m_tree.openElements()->pop();
+ resetInsertionModeAppropriately();
+ processEndOfFile(token);
+ return;
}
ASSERT(m_tree.currentNode());
m_tree.openElements()->popAll();