From ed94c11d086bb2f13297f761bb8f626e76ae07d8 Mon Sep 17 00:00:00 2001 From: trevor-signal <131492920+trevor-signal@users.noreply.github.com> Date: Wed, 13 Mar 2024 21:07:29 -0400 Subject: [PATCH] Improve resiliency to excessive prekey generation --- ts/textsecure/AccountManager.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/ts/textsecure/AccountManager.ts b/ts/textsecure/AccountManager.ts index debb2ef596..88b58a5265 100644 --- a/ts/textsecure/AccountManager.ts +++ b/ts/textsecure/AccountManager.ts @@ -588,7 +588,15 @@ export default class AccountManager extends EventTarget { await this.server.getMyKeyCounts(serviceIdKind); let preKeys: Array | undefined; - if (preKeyCount < PRE_KEY_MINIMUM || forceUpdate) { + + // We want to generate new keys both if there are too few keys, and also if we + // have too many on the server (unlikely, but has happened due to bugs), since + // uploading new keys _should_ replace all existing ones on the server + if ( + preKeyCount < PRE_KEY_MINIMUM || + preKeyCount > PRE_KEY_MAX_COUNT || + forceUpdate + ) { log.info( `${logId}: Server prekey count is ${preKeyCount}, generating a new set` ); @@ -596,7 +604,11 @@ export default class AccountManager extends EventTarget { } let pqPreKeys: Array | undefined; - if (kyberPreKeyCount < PRE_KEY_MINIMUM || forceUpdate) { + if ( + kyberPreKeyCount < PRE_KEY_MINIMUM || + preKeyCount > PRE_KEY_MAX_COUNT || + forceUpdate + ) { log.info( `${logId}: Server kyber prekey count is ${kyberPreKeyCount}, generating a new set` );