From 44aa582ceb79876f67ddc3ff0bbd454dc6e73f19 Mon Sep 17 00:00:00 2001 From: Michael Schneider Date: Sun, 13 Nov 2016 17:15:11 -0800 Subject: [PATCH] Fix crash if batch update blocks are nil although method declaration allows nullable (#2599) --- AsyncDisplayKit/ASCollectionView.mm | 4 +++- AsyncDisplayKit/ASTableNode.mm | 4 +++- AsyncDisplayKitTests/ASCollectionViewTests.mm | 10 ++++++++++ AsyncDisplayKitTests/ASTableViewTests.m | 9 +++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/AsyncDisplayKit/ASCollectionView.mm b/AsyncDisplayKit/ASCollectionView.mm index 9196567863..f80f476c2c 100644 --- a/AsyncDisplayKit/ASCollectionView.mm +++ b/AsyncDisplayKit/ASCollectionView.mm @@ -653,7 +653,9 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell"; ASDisplayNodeAssertMainThread(); [_dataController beginUpdates]; - updates(); + if (updates) { + updates(); + } [_dataController endUpdatesAnimated:animated completion:completion]; } diff --git a/AsyncDisplayKit/ASTableNode.mm b/AsyncDisplayKit/ASTableNode.mm index 3ffe388e1b..48c62cbe9c 100644 --- a/AsyncDisplayKit/ASTableNode.mm +++ b/AsyncDisplayKit/ASTableNode.mm @@ -521,7 +521,9 @@ ASEnvironmentCollectionTableSetEnvironmentState(_environmentStateLock) - (void)performBatchAnimated:(BOOL)animated updates:(void (^)())updates completion:(void (^)(BOOL))completion { [self.view beginUpdates]; - updates(); + if (updates) { + updates(); + } [self.view endUpdatesAnimated:animated completion:completion]; } diff --git a/AsyncDisplayKitTests/ASCollectionViewTests.mm b/AsyncDisplayKitTests/ASCollectionViewTests.mm index f0f509195e..51a4804777 100644 --- a/AsyncDisplayKitTests/ASCollectionViewTests.mm +++ b/AsyncDisplayKitTests/ASCollectionViewTests.mm @@ -798,4 +798,14 @@ XCTAssertNotEqualObjects(oldHeader, newHeader); } +- (void)testThatNilBatchUpdatesCanBeSubmitted +{ + __block ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; + __block ASCollectionNode *cn = testController.collectionNode; + + // Passing nil blocks should not crash + [cn performBatchUpdates:nil completion:nil]; + [cn performBatchAnimated:NO updates:nil completion:nil]; +} + @end diff --git a/AsyncDisplayKitTests/ASTableViewTests.m b/AsyncDisplayKitTests/ASTableViewTests.m index 510306547b..8091e7c2af 100644 --- a/AsyncDisplayKitTests/ASTableViewTests.m +++ b/AsyncDisplayKitTests/ASTableViewTests.m @@ -705,6 +705,15 @@ } } +- (void)testThatNilBatchUpdatesCanBeSubmitted +{ + ASTableNode *node = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; + + // Passing nil blocks should not crash + [node performBatchUpdates:nil completion:nil]; + [node performBatchAnimated:NO updates:nil completion:nil]; +} + @end @implementation UITableView (Testing)