Skip to content

Commit 3d8b839

Browse files
Mehdi Mulanifacebook-github-bot
authored andcommitted
Use module copies in RCTBridge APIs
Summary: This array can be modified while it's being iterated, so we need to take a copy. I also found another crash and guarded against it. Reviewed By: fkgozali Differential Revision: D8955708 fbshipit-source-id: 76250bc5d451776e74505733c0f3c14e555fb576
1 parent ccdd450 commit 3d8b839

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

React/Base/RCTBridge.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ - (id)moduleForClass:(Class)moduleClass
246246
- (NSArray *)modulesConformingToProtocol:(Protocol *)protocol
247247
{
248248
NSMutableArray *modules = [NSMutableArray new];
249-
for (Class moduleClass in self.moduleClasses) {
249+
for (Class moduleClass in [self.moduleClasses copy]) {
250250
if ([moduleClass conformsToProtocol:protocol]) {
251251
id module = [self moduleForClass:moduleClass];
252252
if (module) {

React/CxxBridge/RCTCxxBridge.mm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,8 +544,9 @@ - (void)_initializeBridge:(std::shared_ptr<JSExecutorFactory>)executorFactory
544544
RCT_PROFILE_BEGIN_EVENT(RCTProfileTagAlways,
545545
@"-[RCTCxxBridge initModulesWithDispatchGroup:] autoexported moduleData", nil);
546546

547-
NSMutableArray<RCTModuleData *> *moduleDataByID = [NSMutableArray arrayWithCapacity:moduleClasses.count];
548-
for (Class moduleClass in moduleClasses) {
547+
NSArray *moduleClassesCopy = [moduleClasses copy];
548+
NSMutableArray<RCTModuleData *> *moduleDataByID = [NSMutableArray arrayWithCapacity:moduleClassesCopy.count];
549+
for (Class moduleClass in moduleClassesCopy) {
549550
NSString *moduleName = RCTBridgeModuleNameForClass(moduleClass);
550551

551552
// Check for module name collisions

0 commit comments

Comments
 (0)