Firebase-ios-sdk: Build fails in ios simulator if address sanitizer is off

Created on 18 Nov 2018  路  8Comments  路  Source: firebase/firebase-ios-sdk

  • Xcode version: 10
  • Firebase SDK version: 5.12.0
  • Firebase Component: FirebaseAnalytics (5.3.0), FirebaseAnalyticsInterop (1.1.0), FirebaseCore (5.1.7), FirebaseInstanceID (3.3.0), FirebaseMessaging (3.2.1)
  • Component version: __5.3.0___

[REQUIRED] Step 3: Describe the problem

If switch off address sanitizer build does not compile with error:
Undefined symbols for architecture x86_64:
"___ubsan_handle_sub_overflow", referenced from:
+[FIRMessagingPendingTopicsList pruneTopicBatches:] in FirebaseMessaging(FIRMessagingPendingTopicsList.o)
-[FIRMessagingConnection willProcessProto:] in FirebaseMessaging(FIRMessagingConnection.o)
-[FIRMessagingDelayedMessageQueue scheduleTimeoutInMillis:] in FirebaseMessaging(FIRMessagingDelayedMessageQueue.o)
-[FIRMessagingDataMessageManager sendDelayedMessages:] in FirebaseMessaging(FIRMessagingDataMessageManager.o)
"___ubsan_handle_divrem_overflow", referenced from:
_FIRMessagingGetFreeDiskSpaceInMB in FirebaseMessaging(FIRMessagingUtilities.o)
"___ubsan_handle_add_overflow", referenced from:
_ReadRawVarInt32 in FirebaseMessaging(FIRMessagingCodedInputStream.o)
-[FIRMessagingConnection willProcessProto:] in FirebaseMessaging(FIRMessagingConnection.o)
-[FIRMessagingConnection willSendProto:] in FirebaseMessaging(FIRMessagingConnection.o)
-[FIRMessagingDelayedMessageQueue queueMessage:] in FirebaseMessaging(FIRMessagingDelayedMessageQueue.o)
-[FIRMessagingDataMessageManager handleExpirationForDataMessage:] in FirebaseMessaging(FIRMessagingDataMessageManager.o)
+[FIRMessagingReceiver nextMessageID] in FirebaseMessaging(FIRMessagingReceiver.o)
-[FIRMessagingRmqManager loadInitialOutgoingPersistentId] in FirebaseMessaging(FIRMessagingRmqManager.o)
...
"___ubsan_handle_pointer_overflow", referenced from:
_ReadRawByte in FirebaseMessaging(FIRMessagingCodedInputStream.o)
-[FIRMessagingSecureSocket performRead] in FirebaseMessaging(FIRMessagingSecureSocket.o)
"___ubsan_handle_float_cast_overflow", referenced from:
-[FIRMessaging setupSyncMessageManager] in FirebaseMessaging(FIRMessaging.o)
-[FIRMessagingDelayedMessageQueue calculateTimeoutInMillisWithDelayInSeconds:] in FirebaseMessaging(FIRMessagingDelayedMessageQueue.o)
-[FIRMessagingClient retryConnectionImmediately:] in FirebaseMessaging(FIRMessagingClient.o)
_FIRMessagingCurrentTimestampInSeconds in FirebaseMessaging(FIRMessagingUtilities.o)
_FIRMessagingCurrentTimestampInMilliseconds in FirebaseMessaging(FIRMessagingUtilities.o)
_FIRMessagingGetFreeDiskSpaceInMB in FirebaseMessaging(FIRMessagingUtilities.o)
"___ubsan_handle_shift_out_of_bounds", referenced from:
_ReadRawVarInt32 in FirebaseMessaging(FIRMessagingCodedInputStream.o)
_LogicalRightShift32 in FirebaseMessaging(FIRMessagingSecureSocket.o)
-[FIRMessagingClient nextRetryInterval] in FirebaseMessaging(FIRMessagingClient.o)
"___ubsan_handle_nonnull_arg", referenced from:
+[FIRApp registerAsConfigurable:] in FirebaseCore(FIRApp.o)
+[FIRApp readDataCollectionSwitchFromPlist] in FirebaseCore(FIRApp.o)
+[FIRConfiguration sharedInstance] in FirebaseCore(FIRConfiguration.o)
+[FIRAnalyticsConfiguration sharedInstance] in FirebaseCore(FIRAnalyticsConfiguration.o)
+[FIRComponentContainer registerAsComponentRegistrant:] in FirebaseCore(FIRComponentContainer.o)
_FIRLoggerInitializeASL in FirebaseCore(FIRLogger.o)
+[FIRMessaging messaging] in FirebaseMessaging(FIRMessaging.o)
...
"___ubsan_handle_load_invalid_value", referenced from:
-[FIRApp getTokenForcingRefresh:withCallback:] in FirebaseCore(FIRApp.o)
-[FIRApp setDataCollectionDefaultEnabled:] in FirebaseCore(FIRApp.o)
-[FIRApp isAppIDValid] in FirebaseCore(FIRApp.o)
-[FIRApp alreadyOutputDataCollectionFlag] in FirebaseCore(FIRApp.o)
-[FIRApp setAlreadyOutputDataCollectionFlag:] in FirebaseCore(FIRApp.o)
-[FIRApp isDefaultApp] in FirebaseCore(FIRApp.o)
+[FIRDependency dependencyWithProtocol:isRequired:] in FirebaseCore(FIRDependency.o)
...
"___ubsan_handle_negate_overflow", referenced from:
-[FIRMessagingConnection logMessage:messageType:isOut:] in FirebaseMessaging(FIRMessagingConnection.o)
"___ubsan_handle_type_mismatch_v1", referenced from:
-[FIRApp initInstanceWithName:options:] in FirebaseCore(FIRApp.o)
-[FIRApp getTokenForcingRefresh:withCallback:] in FirebaseCore(FIRApp.o)
-[FIRApp configureCore] in FirebaseCore(FIRApp.o)
-[FIRApp options] in FirebaseCore(FIRApp.o)
+[FIRApp registerAsConfigurable:] in FirebaseCore(FIRApp.o)
-[FIRApp getUID] in FirebaseCore(FIRApp.o)
-[FIRApp isAppIDValid] in FirebaseCore(FIRApp.o)

Steps to reproduce:

just switch off address sanitizer

question

Most helpful comment

@var-const yes UBSan was active. After disabling it the issue was gone.

All 8 comments

I'm not able to reproduce with Xcode 10.1. Does doing Product -> Clean Build Folder or rm ~/Library/Developer/Xcode/DerivedData make a difference?

What is the exact version of Xcode? Are you using the new or old build system? This sounds more like an Xcode build issue than a Firebase issue.

Version 10.1 (10B61)
Removing derived data does not help
using the legacy build system
screen shot 2018-11-18 at 17 46 56
on release build all good

I'm not able to reproduce with the Messaging quick start. With the legacy build system, I built with the Address Sanitizer on. I turned it off and it rebuilt successfully.

Messaging quick start uses 8.0 however I use
platform :ios, '11.0' in pod file

Changing to 11.0 doesn't make a difference for me. We'll likely need a reproducible example to make progress on this issue.

will try to prepare it

@evgzor The linker issues seem to all complain about UBSan (Undefined Behavior Sanitizer). Just to check, do you have UBSan enabled in XCode?

@var-const yes UBSan was active. After disabling it the issue was gone.

Was this page helpful?
0 / 5 - 0 ratings