From 488eb3ef6a6e99b51937f3c71779606207437037 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Thu, 19 Oct 2017 18:59:30 +0100 Subject: [PATCH 1/2] Fix production crash --- packages/react-dom/src/ReactDOMFiberComponent.js | 2 +- packages/react-dom/src/server/ReactPartialRenderer.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-dom/src/ReactDOMFiberComponent.js b/packages/react-dom/src/ReactDOMFiberComponent.js index 48286333159..3ad08af4b59 100644 --- a/packages/react-dom/src/ReactDOMFiberComponent.js +++ b/packages/react-dom/src/ReactDOMFiberComponent.js @@ -61,7 +61,7 @@ var HTML = '__html'; var {Namespaces: {html: HTML_NAMESPACE}, getIntrinsicNamespace} = DOMNamespaces; -var getStack = emptyFunction.thatReturnsArgument(''); +var getStack = emptyFunction.thatReturns(''); if (__DEV__) { getStack = getCurrentFiberStackAddendum; diff --git a/packages/react-dom/src/server/ReactPartialRenderer.js b/packages/react-dom/src/server/ReactPartialRenderer.js index 9d2aea37a47..d01feaebe19 100644 --- a/packages/react-dom/src/server/ReactPartialRenderer.js +++ b/packages/react-dom/src/server/ReactPartialRenderer.js @@ -30,7 +30,7 @@ var omittedCloseTags = require('omittedCloseTags'); var isCustomComponent = require('isCustomComponent'); var toArray = React.Children.toArray; -var getStackAddendum = emptyFunction.thatReturnsArgument(''); +var getStackAddendum = emptyFunction.thatReturns(''); if (__DEV__) { var warning = require('fbjs/lib/warning'); From 90cc1ddf131150e6e8605939db814ab12af1097c Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Thu, 19 Oct 2017 19:06:14 +0100 Subject: [PATCH 2/2] Add regression test --- .../src/__tests__/ReactDOMProduction-test.js | 22 +++++++++++++++++++ .../__tests__/ReactDOMComponent-test.js | 4 ++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/react-dom/src/__tests__/ReactDOMProduction-test.js b/packages/react-dom/src/__tests__/ReactDOMProduction-test.js index 570a59a7ebf..664bc4b11dc 100644 --- a/packages/react-dom/src/__tests__/ReactDOMProduction-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMProduction-test.js @@ -211,6 +211,28 @@ describe('ReactDOMProduction', () => { ); }); + // Regression test verifying that trying to access (missing) component stack doesn't crash. + it('should throw on children for void elements', () => { + const errorCode = 137; + const container = document.createElement('div'); + expect(() => + ReactDOM.render(children, container), + ).toThrowError( + `Minified React error #${errorCode}; visit ` + + `http://facebook.github.io/react/docs/error-decoder.html?invariant=${errorCode}&args[]=input&args[]=` + + ' for the full message or use the non-minified dev environment' + + ' for full errors and additional helpful warnings.', + ); + expect(() => + ReactDOMServer.renderToString(children, container), + ).toThrowError( + `Minified React error #${errorCode}; visit ` + + `http://facebook.github.io/react/docs/error-decoder.html?invariant=${errorCode}&args[]=input&args[]=` + + ' for the full message or use the non-minified dev environment' + + ' for full errors and additional helpful warnings.', + ); + }); + it('should not crash with devtools installed', () => { try { global.__REACT_DEVTOOLS_GLOBAL_HOOK__ = { diff --git a/packages/react-dom/src/shared/__tests__/ReactDOMComponent-test.js b/packages/react-dom/src/shared/__tests__/ReactDOMComponent-test.js index abf0fd7cec6..b1211e03de7 100644 --- a/packages/react-dom/src/shared/__tests__/ReactDOMComponent-test.js +++ b/packages/react-dom/src/shared/__tests__/ReactDOMComponent-test.js @@ -953,7 +953,7 @@ describe('ReactDOMComponent', () => { ); }); - it('should warn against children for void elements', () => { + it('should throw on children for void elements', () => { const container = document.createElement('div'); let caughtErr; try { @@ -969,7 +969,7 @@ describe('ReactDOMComponent', () => { ); }); - it('should warn against dangerouslySetInnerHTML for void elements', () => { + it('should throw on dangerouslySetInnerHTML for void elements', () => { const container = document.createElement('div'); let caughtErr; try {