Backport missing ViewState guard for updateOverflowInset#97010
Open
KJ21-ENG wants to merge 1 commit into
Open
Conversation
Contributor
|
|
|
@eVoloshchak Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
Contributor
|
🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Explanation of Change
Backports React Native's missing-
ViewStateguard forSurfaceMountingManager.updateOverflowInset()into the existing React Native 0.85.3patch. A stale Fabric batch mount item can reference a view that has already been
removed; the patched method now soft-logs that condition and returns instead of
throwing
RetryableMountingLayerException.The existing
addViewAt,updateProps, andupdateLayoutprotections remain inplace. The combined patch can be removed when App upgrades to a React Native release
that contains all four upstream guards.
Fixed Issues
$ #93833
PROPOSAL: #93833 (comment)
Tests
The original production race has no known deterministic reproduction. The following
validation was performed:
patch without warnings or errors.
validate-patchescheck passed.git diff --checkand a reverse-apply check against the installed patched ReactNative source passed.
Manual Android smoke is not claimed as deterministic proof; the repeatable smoke flow
is listed under QA Steps, and final effectiveness will be confirmed by monitoring
APP-3E3 after deployment.
this changes Kotlin inside React Native and introduces no JS/TS execution path.
Offline tests
N/A. The guard runs in React Native's Fabric mounting layer and does not read network,
Onyx, account, or permission state. No offline manual run is claimed.
QA Steps
The crash is not deterministically reproducible. Use these steps as regression smoke
coverage; production effectiveness will be confirmed by monitoring APP-3E3.
PR Author Checklist
Checked boxes below confirm that every current template item was reviewed. Items marked
N/A were not performed and are not claimed as test evidence. This is an Android-only
React Native Kotlin patch with no App UI, product copy, assets, CSS, message composer,
Storybook, deeplink, or JS/TS behavior change.
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected) — N/A: no App component changed.StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)) — N/A.npm run compress-svg) — N/A.Avataris modified, I verified thatAvataris working as expected in all cases) — N/A.Designlabel and/or tagged@Expensify/designso the design team can review the changes. — N/A.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps. — N/A:mainhas not been merged after review and the branch is still based on currentmain.Screenshots/Videos
Android: Native
N/A — no visual change.
Android: mWeb Chrome
N/A — Android native-only change with no visual effect.
iOS: Native
N/A — Android native-only change with no visual effect.
iOS: mWeb Safari
N/A — Android native-only change with no visual effect.
MacOS: Chrome / Safari
N/A — Android native-only change with no visual effect.