Remove possible transaction from identity cache read.

main
Greyson Parrelli 2022-11-04 14:29:24 -04:00 zatwierdzone przez Cody Henthorne
rodzic f7adf2ee5a
commit bdba048bc4
2 zmienionych plików z 7 dodań i 12 usunięć

Wyświetl plik

@ -29,6 +29,7 @@ import org.signal.libsignal.protocol.IdentityKey;
import org.signal.libsignal.protocol.InvalidKeyException;
import org.thoughtcrime.securesms.database.model.IdentityRecord;
import org.thoughtcrime.securesms.database.model.IdentityStoreRecord;
import org.thoughtcrime.securesms.database.model.RecipientRecord;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
@ -37,10 +38,12 @@ import org.thoughtcrime.securesms.util.Base64;
import org.signal.core.util.CursorUtil;
import org.thoughtcrime.securesms.util.IdentityUtil;
import org.signal.core.util.SqlUtil;
import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.util.UuidUtil;
import java.io.IOException;
import java.util.Optional;
import java.util.UUID;
public class IdentityDatabase extends Database {
@ -110,8 +113,10 @@ public class IdentityDatabase extends Database {
timestamp,
nonblockingApproval);
} else if (UuidUtil.isUuid(addressName)) {
if (SignalDatabase.recipients().containsPhoneOrUuid(addressName)) {
Recipient recipient = Recipient.external(context, addressName);
Optional<RecipientId> byServiceId = SignalDatabase.recipients().getByServiceId(ServiceId.parseOrThrow(addressName));
if (byServiceId.isPresent()) {
Recipient recipient = Recipient.resolved(byServiceId.get());
if (recipient.hasE164() && !UuidUtil.isUuid(recipient.requireE164())) {
Log.i(TAG, "Could not find identity for UUID. Attempting E164.");

Wyświetl plik

@ -396,20 +396,10 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
"""
}
fun containsPhoneOrUuid(id: String): Boolean {
val query = "$SERVICE_ID = ? OR $PHONE = ?"
val args = arrayOf(id, id)
readableDatabase.query(TABLE_NAME, arrayOf(ID), query, args, null, null, null).use { cursor -> return cursor != null && cursor.moveToFirst() }
}
fun getByE164(e164: String): Optional<RecipientId> {
return getByColumn(PHONE, e164)
}
fun getByEmail(email: String): Optional<RecipientId> {
return getByColumn(EMAIL, email)
}
fun getByGroupId(groupId: GroupId): Optional<RecipientId> {
return getByColumn(GROUP_ID, groupId.toString())
}