From 10ed9b5aa0d20c408297af9dfefe206524d4ea71 Mon Sep 17 00:00:00 2001 From: Paul Beusterien Date: Sun, 26 Jul 2026 06:44:02 -0700 Subject: [PATCH 1/2] Fix EXC_BAD_ACCESS in GDTCORLogAssert when path contains % characters --- CHANGELOG.md | 1 + .../GDTCORLibrary/GDTCORConsoleLogger.m | 17 ++++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5da55242..f2b91586 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ # Unreleased +- Fix `EXC_BAD_ACCESS` crash in `GDTCORLogAssert` when a user's project path contains `%` characters. ([#16455](https://github.com/firebase/firebase-ios-sdk/issues/16455)) - Cancel upload operation when background task expires. - Log error when handling directory enumeration. diff --git a/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m b/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m index 5eaee924..85113715 100644 --- a/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m +++ b/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m @@ -29,12 +29,13 @@ void GDTCORLog(GDTCORMessageCode code, GDTCORLoggingLevel logLevel, NSString *fo // Don't log anything in not debug builds. #if !NDEBUG if (logLevel >= GDTCORConsoleLoggerLoggingLevel) { - NSString *logFormat = [NSString stringWithFormat:@"%@[%@] %@", kGDTCORConsoleLogger, - GDTCORMessageCodeEnumToString(code), format]; va_list args; va_start(args, format); - NSLogv(logFormat, args); + NSString *message = + format ? [[NSString alloc] initWithFormat:format arguments:args] : @""; va_end(args); + + NSLog(@"%@[%@] %@", kGDTCORConsoleLogger, GDTCORMessageCodeEnumToString(code), message); } #endif // !NDEBUG } @@ -44,12 +45,14 @@ void GDTCORLogAssert( // Don't log anything in not debug builds. #if !NDEBUG GDTCORMessageCode code = wasFatal ? GDTCORMCEFatalAssertion : GDTCORMCEGeneralError; - NSString *logFormat = - [NSString stringWithFormat:@"%@[%@] (%@:%ld) : %@", kGDTCORConsoleLogger, - GDTCORMessageCodeEnumToString(code), file, (long)line, format]; + va_list args; va_start(args, format); - NSLogv(logFormat, args); + NSString *message = + format ? [[NSString alloc] initWithFormat:format arguments:args] : @""; va_end(args); + + NSLog(@"%@[%@] (%@:%ld) : %@", kGDTCORConsoleLogger, + GDTCORMessageCodeEnumToString(code), file, (long)line, message); #endif // !NDEBUG } From 1fb02fdac450e6b0f70ccc1b97a2b4753ebf1c13 Mon Sep 17 00:00:00 2001 From: Paul Beusterien Date: Sun, 26 Jul 2026 06:55:09 -0700 Subject: [PATCH 2/2] style --- .../GDTCORLibrary/GDTCORConsoleLogger.m | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m b/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m index 85113715..102b4636 100644 --- a/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m +++ b/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m @@ -31,8 +31,7 @@ void GDTCORLog(GDTCORMessageCode code, GDTCORLoggingLevel logLevel, NSString *fo if (logLevel >= GDTCORConsoleLoggerLoggingLevel) { va_list args; va_start(args, format); - NSString *message = - format ? [[NSString alloc] initWithFormat:format arguments:args] : @""; + NSString *message = format ? [[NSString alloc] initWithFormat:format arguments:args] : @""; va_end(args); NSLog(@"%@[%@] %@", kGDTCORConsoleLogger, GDTCORMessageCodeEnumToString(code), message); @@ -45,14 +44,13 @@ void GDTCORLogAssert( // Don't log anything in not debug builds. #if !NDEBUG GDTCORMessageCode code = wasFatal ? GDTCORMCEFatalAssertion : GDTCORMCEGeneralError; - + va_list args; va_start(args, format); - NSString *message = - format ? [[NSString alloc] initWithFormat:format arguments:args] : @""; + NSString *message = format ? [[NSString alloc] initWithFormat:format arguments:args] : @""; va_end(args); - NSLog(@"%@[%@] (%@:%ld) : %@", kGDTCORConsoleLogger, - GDTCORMessageCodeEnumToString(code), file, (long)line, message); + NSLog(@"%@[%@] (%@:%ld) : %@", kGDTCORConsoleLogger, GDTCORMessageCodeEnumToString(code), file, + (long)line, message); #endif // !NDEBUG }