From b9d682cf00df2d3c86d142b30a7a39a2dc8dc1ae Mon Sep 17 00:00:00 2001 From: automated-signal <37887102+automated-signal@users.noreply.github.com> Date: Thu, 19 Feb 2026 12:50:38 -0600 Subject: [PATCH] Limit embedded groupChange size Co-authored-by: trevor-signal <131492920+trevor-signal@users.noreply.github.com> --- ts/textsecure/SendMessage.preload.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/ts/textsecure/SendMessage.preload.ts b/ts/textsecure/SendMessage.preload.ts index 79c6a445ab..724d16c34f 100644 --- a/ts/textsecure/SendMessage.preload.ts +++ b/ts/textsecure/SendMessage.preload.ts @@ -112,6 +112,8 @@ import type { const log = createLogger('SendMessage'); +const MAX_EMBEDDED_GROUP_CHANGE_BYTES = 2048; + export type SendIdentifierData = | { accessKey: string; @@ -416,7 +418,19 @@ class Message { proto.groupV2 = new Proto.GroupContextV2(); proto.groupV2.masterKey = this.groupV2.masterKey; proto.groupV2.revision = this.groupV2.revision; - proto.groupV2.groupChange = this.groupV2.groupChange || null; + + const { groupChange } = this.groupV2; + if (groupChange) { + if (groupChange.byteLength <= MAX_EMBEDDED_GROUP_CHANGE_BYTES) { + proto.groupV2.groupChange = groupChange; + } else { + // As a message-size optimization, we do not embed large updates and receiving + // devices fetch them from the group server instead + log.info( + `Discarding oversized group change proto (${groupChange.byteLength} bytes)` + ); + } + } } if (this.sticker) { proto.sticker = new Proto.DataMessage.Sticker();