Skip to content

Commit a28ef01

Browse files
authored
Fix a possible crash in encoding when sharedInstance is nil (#5267) (#5270)
* Fix a possible crash in encoding when sharedInstance is nil EXC_BAD_ACCESS comes from ivar access of a nil object. Fixes #5264 * Remove a line only used for testing * Fix the test
1 parent ffe7a55 commit a28ef01

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,9 @@ - (instancetype)initWithCoder:(NSCoder *)coder {
303303

304304
- (void)encodeWithCoder:(NSCoder *)coder {
305305
GDTCCTPrioritizer *sharedInstance = [GDTCCTPrioritizer sharedInstance];
306+
if (!sharedInstance) {
307+
return;
308+
}
306309
NSMutableSet<GDTCOREvent *> *CCTEvents = sharedInstance->_CCTEvents;
307310
if (CCTEvents) {
308311
[coder encodeObject:CCTEvents forKey:GDTCCTUploaderCCTEventsKey];

GoogleDataTransportCCTSupport/GDTCCTTests/Unit/GDTCCTPrioritizerTest.m

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,27 @@ - (void)testNetworkConnectionInfo {
181181
XCTAssertNotEqual(info.network_type, gdt_cct_NetworkConnectionInfo_NetworkType_NONE);
182182
}
183183

184+
/** Tests encoding and decoding a clock using a keyed archiver. */
185+
- (void)testEncodingAndDecoding {
186+
GDTCCTPrioritizer *prioritizer = [GDTCCTPrioritizer sharedInstance];
187+
GDTCOREvent *event = [_CCTGenerator generateEvent:GDTCOREventQosDefault];
188+
event.customPrioritizationParams = @{GDTCCTNeedsNetworkConnectionInfo : @YES};
189+
[prioritizer prioritizeEvent:event];
190+
NSError *error;
191+
dispatch_sync(prioritizer.queue, ^{
192+
});
193+
XCTAssertEqual(prioritizer.CCTEvents.count, 1);
194+
NSData *prioritizerData = GDTCOREncodeArchive(prioritizer, nil, &error);
195+
XCTAssertNil(error);
196+
XCTAssertNotNil(prioritizerData);
197+
198+
error = nil;
199+
GDTCCTPrioritizer *unarchivedPrioritizer = (GDTCCTPrioritizer *)GDTCORDecodeArchive(
200+
[GDTCCTPrioritizer class], nil, prioritizerData, &error);
201+
XCTAssertNil(error);
202+
XCTAssertNotNil(unarchivedPrioritizer);
203+
XCTAssertEqual([prioritizer hash], [prioritizer hash]);
204+
XCTAssertEqualObjects(prioritizer.CCTEvents, unarchivedPrioritizer.CCTEvents);
205+
}
206+
184207
@end

0 commit comments

Comments
 (0)