From 60c15073bfe0386a91d0eb5eb2656acb7113707e Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Wed, 19 Feb 2020 14:29:05 -0800 Subject: [PATCH] Fix crash in state reconciliation Summary: Changelog: [internal] Repro steps: 1. Go to fbsource/fbobjc. 2. Run following focus command P124860753. 3. Enable Address Sanitizer in Xcode. 3. Run the app from Xcode. 5. Make sure `react_fabric.enable_marketplace_home_ios` and `react_fabric.enabled_state_reconciliation_ios` Mobile Config flags are set to true. 6. Navigate to Marketplace Home and observe use of freed memory exception. You have to wait until second page of marketplace home feed is loaded. {F228880980} # Root cause `ChangedShadowNodePairs` being a vector of pairs of references. Those `shared_ptr` do not outlive the the run of `reconcileStateWithTree` (that's what I originally thought when I made them references). This was introduced in D19814500. Reviewed By: JoshuaGross Differential Revision: D19977784 fbshipit-source-id: 8c4a381137baa08a6af9d3c1cb295fe6c2b2bf95 --- ReactCommon/fabric/mounting/TreeStateReconciliation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReactCommon/fabric/mounting/TreeStateReconciliation.cpp b/ReactCommon/fabric/mounting/TreeStateReconciliation.cpp index afb84283bbe457..58017f16a3c6c8 100644 --- a/ReactCommon/fabric/mounting/TreeStateReconciliation.cpp +++ b/ReactCommon/fabric/mounting/TreeStateReconciliation.cpp @@ -10,8 +10,8 @@ namespace facebook { namespace react { -using ChangedShadowNodePairs = std::vector< - std::pair>; +using ChangedShadowNodePairs = + std::vector>; /** * Clones any children in the subtree that need to be cloned, and adds those to