Skip to content

Commit 97ceee7

Browse files
committed
review-comment: Synchronize when serializing SentryNetworkDetails for breadcrumb
#7588 (comment) Prevent SentryNetworkDetailsData#serialize from reading properties that may be mutated concurrently by SentryNetworkDetailsData#setResponse setState - calls serialize when newState == .completed completionHandler - calls setResponse when invoked. in testing, the completionHandler is invoked after setState(.completed) returns. However based on research this is not guaranteed so lock so ensure no concurrent modification of SentryNetworkDetailsData
1 parent e493996 commit 97ceee7

1 file changed

Lines changed: 8 additions & 6 deletions

File tree

Sources/Sentry/SentryNetworkTracker.m

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -481,12 +481,14 @@ - (void)addBreadcrumbForSessionTask:(NSURLSessionTask *)sessionTask
481481
}
482482

483483
#if SENTRY_TARGET_REPLAY_SUPPORTED
484-
// Add network details if available
485-
SentryReplayNetworkDetails *networkDetails
486-
= objc_getAssociatedObject(sessionTask, &SentryNetworkDetailsKey);
487-
if (networkDetails) {
488-
breadcrumbData[SentryReplayNetworkDetails.replayNetworkDetailsKey] =
489-
[networkDetails serialize];
484+
// Check if network details was enabled for this url.
485+
@synchronized(sessionTask) {
486+
SentryReplayNetworkDetails *networkDetails
487+
= objc_getAssociatedObject(sessionTask, &SentryNetworkDetailsKey);
488+
if (networkDetails) {
489+
breadcrumbData[SentryReplayNetworkDetails.replayNetworkDetailsKey] =
490+
[networkDetails serialize];
491+
}
490492
}
491493
#endif // SENTRY_TARGET_REPLAY_SUPPORTED
492494

0 commit comments

Comments
 (0)