Fix crash when building local e164-only contact record.

Fixes #11572
This commit is contained in:
Greyson Parrelli 2021-08-30 10:02:44 -04:00
parent 8d9d84c4cc
commit 21b82e291b
2 changed files with 8 additions and 2 deletions

View file

@ -76,7 +76,9 @@ public class ContactRecordProcessor extends DefaultStorageRecordProcessor<Signal
} else {
Log.w(TAG, "Newly discovering a registered user via storage service. Saving a storageId for them.");
recipientDatabase.updateStorageId(settings.getId(), keyGenerator.generate());
return StorageSyncModels.localToRemoteRecord(recipientDatabase.getRecipientSettingsForSync(settings.getId()));
RecipientDatabase.RecipientSettings updatedSettings = Objects.requireNonNull(recipientDatabase.getRecipientSettingsForSync(settings.getId()));
return StorageSyncModels.localToRemoteRecord(updatedSettings);
}
})
.transform(r -> r.getContact().get());

View file

@ -16,10 +16,12 @@ import org.whispersystems.signalservice.api.storage.SignalContactRecord;
import org.whispersystems.signalservice.api.storage.SignalGroupV1Record;
import org.whispersystems.signalservice.api.storage.SignalGroupV2Record;
import org.whispersystems.signalservice.api.storage.SignalStorageRecord;
import org.whispersystems.signalservice.api.util.UuidUtil;
import org.whispersystems.signalservice.internal.storage.protos.AccountRecord;
import org.whispersystems.signalservice.internal.storage.protos.ContactRecord.IdentityState;
import java.util.List;
import java.util.UUID;
public final class StorageSyncModels {
@ -91,7 +93,9 @@ public final class StorageSyncModels {
throw new AssertionError("Must have either a UUID or a phone number!");
}
return new SignalContactRecord.Builder(rawStorageId, new SignalServiceAddress(recipient.getUuid(), recipient.getE164()))
UUID uuid = recipient.getUuid() != null ? recipient.getUuid() : UuidUtil.UNKNOWN_UUID;
return new SignalContactRecord.Builder(rawStorageId, new SignalServiceAddress(uuid, recipient.getE164()))
.setUnknownFields(recipient.getSyncExtras().getStorageProto())
.setProfileKey(recipient.getProfileKey())
.setGivenName(recipient.getProfileName().getGivenName())