Skip to content

Commit b4c77b6

Browse files
authored
Verify block is still alive before calling it in task callbacks (#7054)
1 parent 931d7b1 commit b4c77b6

8 files changed

+30
-27
lines changed

FirebaseStorage/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# 7.3.0
2+
- [Fixed] Verify block is still alive before calling it in task callbacks. (#7051)
3+
14
# 7.1.0
25
- [Fixed] Remove explicit MobileCoreServices library linkage from podspec. (#6850)
36

FirebaseStorage/Sources/FIRStorageDeleteTask.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ - (void)enqueue {
6161

6262
fetcher.comment = @"DeleteTask";
6363

64-
#pragma clang diagnostic push
65-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
6664
strongSelf->_fetcherCompletion = ^(NSData *_Nullable data, NSError *_Nullable error) {
6765
if (!self.error) {
6866
self.error = [FIRStorageErrors errorWithServerError:error reference:self.reference];
@@ -72,10 +70,12 @@ - (void)enqueue {
7270
}
7371
self->_fetcherCompletion = nil;
7472
};
75-
#pragma clang diangostic pop
7673

7774
[fetcher beginFetchWithCompletionHandler:^(NSData *_Nullable data, NSError *_Nullable error) {
78-
weakSelf.fetcherCompletion(data, error);
75+
FIRStorageDeleteTask *strongSelf = weakSelf;
76+
if (strongSelf.fetcherCompletion) {
77+
strongSelf.fetcherCompletion(data, error);
78+
}
7979
}];
8080
}];
8181
}

FirebaseStorage/Sources/FIRStorageDownloadTask.m

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,6 @@ - (void)enqueueWithData:(nullable NSData *)resumeData {
109109
}
110110

111111
strongSelf->_fetcher = fetcher;
112-
113-
#pragma clang diagnostic push
114-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
115112
strongSelf->_fetcherCompletion = ^(NSData *data, NSError *error) {
116113
// Fire last progress updates
117114
[self fireHandlersForStatus:FIRStorageTaskStatusProgress snapshot:self.snapshot];
@@ -137,11 +134,13 @@ - (void)enqueueWithData:(nullable NSData *)resumeData {
137134
[self removeAllObservers];
138135
self->_fetcherCompletion = nil;
139136
};
140-
#pragma clang diagnostic pop
141137

142138
strongSelf.state = FIRStorageTaskStateRunning;
143139
[strongSelf.fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
144-
weakSelf.fetcherCompletion(data, error);
140+
FIRStorageDownloadTask *strongSelf = weakSelf;
141+
if (strongSelf.fetcherCompletion) {
142+
strongSelf.fetcherCompletion(data, error);
143+
}
145144
}];
146145
}];
147146
}

FirebaseStorage/Sources/FIRStorageGetDownloadURLTask.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ - (void)enqueue {
8888
strongSelf->_fetcher = fetcher;
8989
fetcher.comment = @"GetDownloadURLTask";
9090

91-
#pragma clang diagnostic push
92-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
9391
strongSelf->_fetcherCompletion = ^(NSData *data, NSError *error) {
9492
NSURL *downloadURL;
9593
if (error) {
@@ -116,9 +114,11 @@ - (void)enqueue {
116114

117115
self->_fetcherCompletion = nil;
118116
};
119-
#pragma clang diagnostic pop
120117
[fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
121-
weakSelf.fetcherCompletion(data, error);
118+
FIRStorageGetDownloadURLTask *strongSelf = weakSelf;
119+
if (strongSelf.fetcherCompletion) {
120+
strongSelf.fetcherCompletion(data, error);
121+
}
122122
}];
123123
}];
124124
};

FirebaseStorage/Sources/FIRStorageGetMetadataTask.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,6 @@ - (void)enqueue {
6464
strongSelf->_fetcher = fetcher;
6565
fetcher.comment = @"GetMetadataTask";
6666

67-
#pragma clang diagnostic push
68-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
6967
strongSelf->_fetcherCompletion = ^(NSData *data, NSError *error) {
7068
FIRStorageMetadata *metadata;
7169
if (error) {
@@ -87,10 +85,12 @@ - (void)enqueue {
8785
}
8886
self->_fetcherCompletion = nil;
8987
};
90-
#pragma clang diagnostic pop
9188

9289
[fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
93-
weakSelf.fetcherCompletion(data, error);
90+
FIRStorageGetMetadataTask *strongSelf = weakSelf;
91+
if (strongSelf.fetcherCompletion) {
92+
strongSelf.fetcherCompletion(data, error);
93+
}
9494
}];
9595
}];
9696
}

FirebaseStorage/Sources/FIRStorageListTask.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,6 @@ - (void)enqueue {
9393
strongSelf->_fetcher = fetcher;
9494
fetcher.comment = @"ListTask";
9595

96-
#pragma clang diagnostic push
97-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
9896
strongSelf->_fetcherCompletion = ^(NSData *data, NSError *error) {
9997
FIRStorageListResult *listResult;
10098
if (error) {
@@ -116,10 +114,12 @@ - (void)enqueue {
116114
// Remove retain cycle set up by `strongSelf->_fetcherCompletion`
117115
self->_fetcherCompletion = nil;
118116
};
119-
#pragma clang diagnostic pop
120117

121118
[fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
122-
weakSelf.fetcherCompletion(data, error);
119+
FIRStorageListTask *strongSelf = weakSelf;
120+
if (strongSelf.fetcherCompletion) {
121+
strongSelf.fetcherCompletion(data, error);
122+
}
123123
}];
124124
}];
125125
}

FirebaseStorage/Sources/FIRStorageUpdateMetadataTask.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@ - (void)enqueue {
7171
GTMSessionFetcher *fetcher = [strongSelf.fetcherService fetcherWithRequest:request];
7272
strongSelf->_fetcher = fetcher;
7373

74-
#pragma clang diagnostic push
75-
#pragma clang diagnostic ignored "-Warc-retain-cycles"
7674
strongSelf->_fetcherCompletion = ^(NSData *data, NSError *error) {
7775
FIRStorageMetadata *metadata;
7876
if (error) {
@@ -94,12 +92,14 @@ - (void)enqueue {
9492
}
9593
self->_fetcherCompletion = nil;
9694
};
97-
#pragma clang diagnostic pop
9895

9996
fetcher.comment = @"UpdateMetadataTask";
10097

10198
[fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
102-
weakSelf.fetcherCompletion(data, error);
99+
FIRStorageUpdateMetadataTask *strongSelf = weakSelf;
100+
if (strongSelf.fetcherCompletion) {
101+
strongSelf.fetcherCompletion(data, error);
102+
}
103103
}];
104104
}];
105105
}

FirebaseStorage/Sources/FIRStorageUploadTask.m

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,9 @@ - (void)enqueue {
178178

179179
[strongSelf->_uploadFetcher
180180
beginFetchWithCompletionHandler:^(NSData *_Nullable data, NSError *_Nullable error) {
181-
if (weakSelf.fetcherCompletion != nil) {
182-
weakSelf.fetcherCompletion(data, error);
181+
FIRStorageUploadTask *strongSelf = weakSelf;
182+
if (strongSelf.fetcherCompletion) {
183+
strongSelf.fetcherCompletion(data, error);
183184
}
184185
}];
185186
}];

0 commit comments

Comments
 (0)