From d4be74e4c028022cccddc9ccd0e44006a3941eb4 Mon Sep 17 00:00:00 2001 From: Sebastian Markbage Date: Wed, 6 Mar 2019 18:51:48 -0800 Subject: [PATCH] Test updates to ensure we have coverage there too --- ...erIntegrationUntrustedURL-test.internal.js | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationUntrustedURL-test.internal.js b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationUntrustedURL-test.internal.js index 2ce5e5fd9ba4e..e0a6029d8b8ff 100644 --- a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationUntrustedURL-test.internal.js +++ b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationUntrustedURL-test.internal.js @@ -17,7 +17,7 @@ let React; let ReactDOM; let ReactDOMServer; -function runTests(itRenders, itRejects) { +function runTests(itRenders, itRejects, expectToReject) { itRenders('a http link with the word javascript in it', async render => { const e = await render( Click me, @@ -122,6 +122,14 @@ function runTests(itRenders, itRejects) { ).toBe('javascript:notfine'); }, ); + + it('rejects a javascript protocol href if it is added during an update', () => { + let container = document.createElement('div'); + ReactDOM.render(click me, container); + expectToReject(() => { + ReactDOM.render(click me, container); + }); + }); } describe('ReactDOMServerIntegration - Untrusted URLs', () => { @@ -144,7 +152,14 @@ describe('ReactDOMServerIntegration - Untrusted URLs', () => { resetModules(); }); - runTests(itRenders, itRenders); + runTests(itRenders, itRenders, fn => + expect(fn).toWarnDev( + 'Warning: A future version of React will block javascript: URLs as a security precaution. ' + + 'Use event handlers instead if you can. If you need to generate unsafe HTML try using ' + + 'dangerouslySetInnerHTML instead.\n' + + ' in a (at **)', + ), + ); }); describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', () => { @@ -174,7 +189,20 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', ( resetModules(); }); - runTests(itRenders, (message, test) => - itThrowsWhenRendering(message, test, 'blocked a javascript: URL'), + runTests( + itRenders, + (message, test) => + itThrowsWhenRendering(message, test, 'blocked a javascript: URL'), + fn => { + let msg; + try { + fn(); + } catch (x) { + msg = x.message; + } + expect(msg).toContain( + 'React has blocked a javascript: URL as a security precaution.', + ); + }, ); });