From 40d5692980bccf33dd50b28e443e198d13524fb6 Mon Sep 17 00:00:00 2001 From: Ben Alpert Date: Fri, 18 Dec 2015 12:39:14 -0800 Subject: [PATCH] Make sure div > html nesting is considered invalid See #5128. --- src/renderers/dom/client/__tests__/validateDOMNesting-test.js | 2 ++ src/renderers/dom/client/validateDOMNesting.js | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/renderers/dom/client/__tests__/validateDOMNesting-test.js b/src/renderers/dom/client/__tests__/validateDOMNesting-test.js index 7f671c61f8..2c18a89d61 100644 --- a/src/renderers/dom/client/__tests__/validateDOMNesting-test.js +++ b/src/renderers/dom/client/__tests__/validateDOMNesting-test.js @@ -67,6 +67,7 @@ describe('ReactContextValidator', function() { expect(isTagStackValid(['div', 'a', 'object', 'a'])).toBe(true); expect(isTagStackValid(['div', 'p', 'button', 'p'])).toBe(true); expect(isTagStackValid(['p', 'svg', 'foreignObject', 'p'])).toBe(true); + expect(isTagStackValid(['html', 'body', 'div'])).toBe(true); // Invalid, but not changed by browser parsing so we allow them expect(isTagStackValid(['div', 'ul', 'ul', 'li'])).toBe(true); @@ -81,5 +82,6 @@ describe('ReactContextValidator', function() { expect(isTagStackValid(['p', 'p'])).toBe(false); expect(isTagStackValid(['table', 'tr'])).toBe(false); expect(isTagStackValid(['div', 'ul', 'li', 'div', 'li'])).toBe(false); + expect(isTagStackValid(['div', 'html'])).toBe(false); }); }); diff --git a/src/renderers/dom/client/validateDOMNesting.js b/src/renderers/dom/client/validateDOMNesting.js index d853990b01..69e69845a1 100644 --- a/src/renderers/dom/client/validateDOMNesting.js +++ b/src/renderers/dom/client/validateDOMNesting.js @@ -186,6 +186,8 @@ if (__DEV__) { // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element case 'html': return tag === 'head' || tag === 'body'; + case '#document': + return tag === 'html'; } // Probably in the "in body" parsing mode, so we outlaw only tag combos @@ -212,6 +214,7 @@ if (__DEV__) { case 'colgroup': case 'frame': case 'head': + case 'html': case 'tbody': case 'td': case 'tfoot':