Skip to content

Commit 7fc7325

Browse files
Prevent firelog from logging invalid data (#8443)
1 parent ecc7d6d commit 7fc7325

File tree

3 files changed

+90
-8
lines changed

3 files changed

+90
-8
lines changed

FirebaseMessaging/Sources/FIRMessagingCode.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ typedef NS_ENUM(NSInteger, FIRMessagingMessageCode) {
137137
kFIRMessagingServiceExtensionLocalFileNotCreated = 20002,
138138
kFIRMessagingServiceExtensionImageNotAttached = 20003,
139139
kFIRMessagingServiceExtensionTransportBytesError = 20004,
140+
kFIRMessagingServiceExtensionInvalidProjectID = 2005,
141+
kFIRMessagingServiceExtensionInvalidMessageID = 2006,
142+
kFIRMessagingServiceExtensionInvalidInstanceID = 2007,
140143

141144
kFIRMessagingMessageCodeFIRApp002 = 22002,
142145
kFIRMessagingMessageCodeInternal001 = 22001,

FirebaseMessaging/Sources/FIRMessagingExtensionHelper.m

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,26 @@ - (void)exportDeliveryMetricsToBigQueryWithMessageInfo:(NSDictionary *)info {
211211
fm_MessagingClientEventExtension eventExtension = fm_MessagingClientEventExtension_init_default;
212212

213213
fm_MessagingClientEvent clientEvent = fm_MessagingClientEvent_init_default;
214+
if (!info[kFIRMessagingSenderID]) {
215+
FIRMessagingLoggerError(kFIRMessagingServiceExtensionInvalidProjectID,
216+
@"Delivery logging failed: Invalid project ID");
217+
return;
218+
}
214219
clientEvent.project_number = (int64_t)[info[kFIRMessagingSenderID] longLongValue];
220+
221+
if (!info[kFIRMessagingMessageIDKey] ||
222+
![info[kFIRMessagingMessageIDKey] isKindOfClass:NSString.class]) {
223+
FIRMessagingLoggerWarn(kFIRMessagingServiceExtensionInvalidMessageID,
224+
@"Delivery logging failed: Invalid Message ID");
225+
return;
226+
}
215227
clientEvent.message_id = FIRMessagingEncodeString(info[kFIRMessagingMessageIDKey]);
228+
229+
if (!info[kFIRMessagingFID] || ![info[kFIRMessagingFID] isKindOfClass:NSString.class]) {
230+
FIRMessagingLoggerWarn(kFIRMessagingServiceExtensionInvalidInstanceID,
231+
@"Delivery logging failed: Invalid Instance ID");
232+
return;
233+
}
216234
clientEvent.instance_id = FIRMessagingEncodeString(info[kFIRMessagingFID]);
217235

218236
if ([info[@"aps"][kFIRMessagingMessageAPNSContentAvailableKey] intValue] == 1 &&
@@ -225,15 +243,25 @@ - (void)exportDeliveryMetricsToBigQueryWithMessageInfo:(NSDictionary *)info {
225243

226244
NSString *bundleID = [NSBundle mainBundle].bundleIdentifier;
227245
if ([GULAppEnvironmentUtil isAppExtension]) {
228-
clientEvent.package_name =
229-
FIRMessagingEncodeString([[self class] bundleIdentifierByRemovingLastPartFrom:bundleID]);
230-
} else {
246+
bundleID = [[self class] bundleIdentifierByRemovingLastPartFrom:bundleID];
247+
}
248+
if (bundleID) {
231249
clientEvent.package_name = FIRMessagingEncodeString(bundleID);
232250
}
233251
clientEvent.event = fm_MessagingClientEvent_Event_MESSAGE_DELIVERED;
234-
clientEvent.analytics_label = FIRMessagingEncodeString(info[kFIRMessagingAnalyticsMessageLabel]);
235-
clientEvent.campaign_id = (int64_t)[info[kFIRMessagingAnalyticsComposerIdentifier] longLongValue];
236-
clientEvent.composer_label = FIRMessagingEncodeString(info[kFIRMessagingAnalyticsComposerLabel]);
252+
253+
if (info[kFIRMessagingAnalyticsMessageLabel]) {
254+
clientEvent.analytics_label =
255+
FIRMessagingEncodeString(info[kFIRMessagingAnalyticsMessageLabel]);
256+
}
257+
if (info[kFIRMessagingAnalyticsComposerIdentifier]) {
258+
clientEvent.campaign_id =
259+
(int64_t)[info[kFIRMessagingAnalyticsComposerIdentifier] longLongValue];
260+
}
261+
if (info[kFIRMessagingAnalyticsComposerLabel]) {
262+
clientEvent.composer_label =
263+
FIRMessagingEncodeString(info[kFIRMessagingAnalyticsComposerLabel]);
264+
}
237265

238266
eventExtension.messaging_client_event = &clientEvent;
239267
FIRMessagingMetricsLog *log =

FirebaseMessaging/Tests/UnitTests/FIRMessagingExtensionHelperTest.m

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,13 +156,64 @@ - (void)testModifyNotificationWithInvalidPayloadDataValidMimeType {
156156
}
157157
}
158158

159-
- (void)testDeliveryMetricsLogging {
159+
- (void)testDeliveryMetricsLoggingWithEmptyPayload {
160160
OCMStub([_mockUtilClass isAppExtension]).andReturn(YES);
161161
NSDictionary *fakeMessageInfo = @{@"aps" : @{}};
162162

163163
[_mockExtensionHelper exportDeliveryMetricsToBigQueryWithMessageInfo:fakeMessageInfo];
164-
OCMVerify([_mockExtensionHelper bundleIdentifierByRemovingLastPartFrom:[OCMArg any]]);
164+
OCMReject([_mockExtensionHelper bundleIdentifierByRemovingLastPartFrom:[OCMArg any]]);
165165
}
166+
167+
- (void)testDeliveryMetricsLoggingWithInvalidMessageID {
168+
OCMStub([_mockUtilClass isAppExtension]).andReturn(YES);
169+
NSDictionary *fakeMessageInfo = @{
170+
@"aps" : @{@"badge" : @9, @"mutable-content" : @1},
171+
@"fcm_options" : @{@"image" : @"https://google.com"},
172+
@"google.c.fid" : @"fakeFIDForTest",
173+
@"google.c.sender.id" : @123456789
174+
};
175+
[_mockExtensionHelper exportDeliveryMetricsToBigQueryWithMessageInfo:fakeMessageInfo];
176+
OCMReject([_mockExtensionHelper bundleIdentifierByRemovingLastPartFrom:[OCMArg any]]);
177+
}
178+
179+
- (void)testDeliveryMetricsLoggingWithInvalidFID {
180+
OCMStub([_mockUtilClass isAppExtension]).andReturn(YES);
181+
NSDictionary *fakeMessageInfo = @{
182+
@"aps" : @{@"badge" : @9, @"mutable-content" : @1},
183+
@"fcm_options" : @{@"image" : @"https://google.com"},
184+
@"google.c.sender.id" : @123456789
185+
};
186+
[_mockExtensionHelper exportDeliveryMetricsToBigQueryWithMessageInfo:fakeMessageInfo];
187+
OCMReject([_mockExtensionHelper bundleIdentifierByRemovingLastPartFrom:[OCMArg any]]);
188+
}
189+
190+
- (void)testDeliveryMetricsLoggingWithDisplayPayload {
191+
OCMStub([_mockUtilClass isAppExtension]).andReturn(YES);
192+
NSDictionary *fakeMessageInfo = @{
193+
@"aps" : @{@"badge" : @9, @"mutable-content" : @1},
194+
@"fcm_options" : @{@"image" : @"https://google.com"},
195+
@"gcm.message_id" : @"1627428480762269",
196+
@"google.c.fid" : @"fakeFIDForTest",
197+
@"google.c.sender.id" : @123456789
198+
};
199+
200+
[_mockExtensionHelper exportDeliveryMetricsToBigQueryWithMessageInfo:fakeMessageInfo];
201+
OCMExpect([_mockExtensionHelper bundleIdentifierByRemovingLastPartFrom:[OCMArg any]]);
202+
}
203+
204+
- (void)testDeliveryMetricsLoggingWithDataPayload {
205+
OCMStub([_mockUtilClass isAppExtension]).andReturn(NO);
206+
NSDictionary *fakeMessageInfo = @{
207+
@"aps" : @{@"badge" : @9, @"content-available" : @1},
208+
@"fcm_options" : @{@"image" : @"https://google.com"},
209+
@"gcm.message_id" : @"1627428480762269",
210+
@"google.c.fid" : @"fakeFIDForTest",
211+
@"google.c.sender.id" : @123456789
212+
};
213+
[_mockExtensionHelper exportDeliveryMetricsToBigQueryWithMessageInfo:fakeMessageInfo];
214+
OCMReject([_mockExtensionHelper bundleIdentifierByRemovingLastPartFrom:[OCMArg any]]);
215+
}
216+
166217
@end
167218

168219
#endif // TARGET_OS_IOS || TARGET_OS_OSX || TARGET_OS_WATCH

0 commit comments

Comments
 (0)