-
Notifications
You must be signed in to change notification settings - Fork 49.8k
Description
The $RS (completeSegment) function in React DOM's Server-Side Rendering lacks null safety checks on parentNode, causing a race condition error when Suspense boundaries resolve in production builds.
Error:
Cannot read properties of null (reading 'parentNode')
Root Cause:
File: packages/react-dom-bindings/src/server/fizz-instruction-set/ReactDOMFizzInstructionSetInlineCodeStrings.js (line 15)
The completeSegment function doesn't check if a.parentNode or b.parentNode is null before accessing it. During Suspense resolution, nodes can be removed by other processes, setting parentNode to null.
export const completeSegment =
'$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};';Proposed Fix:
export const completeSegment =
'$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);if(a&&b&&a.parentNode&&b.parentNode){for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)}};';React version: 19.2.0
Steps To Reproduce
- Clone the reproduction repository
- Run
npm install - Run
npm run build(production build required) - Run
npm run start - Navigate to http://localhost:3000
- Note: The bug may not occur on the first page load. Reload the page several times if needed.
- Check browser console for the error
Link to code example:
https://github.com/ponharu/react-issue
The current behavior
During SSR with Suspense boundaries in production builds, the $RS function throws:
Cannot read properties of null (reading 'parentNode')
This occurs when the function attempts to manipulate DOM nodes whose parentNode has become null due to a race condition during Suspense resolution.
The expected behavior
The $RS function should safely handle cases where parentNode is null by checking for null before attempting DOM manipulation, preventing the error and allowing the page to render correctly.