From 7f74a9dd41e4548437c2385237f27b7ce0fca28c Mon Sep 17 00:00:00 2001 From: automated-signal <37887102+automated-signal@users.noreply.github.com> Date: Tue, 4 Feb 2025 20:02:36 -0600 Subject: [PATCH] Avoid mute timeouts with invalid delay values Co-authored-by: trevor-signal <131492920+trevor-signal@users.noreply.github.com> --- ts/models/conversations.ts | 9 ++++++++- ts/util/timestamp.ts | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ts/models/conversations.ts b/ts/models/conversations.ts index a90bbb27e..011964236 100644 --- a/ts/models/conversations.ts +++ b/ts/models/conversations.ts @@ -26,7 +26,7 @@ import { getNotificationTextForMessage } from '../util/getNotificationTextForMes import { getNotificationDataForMessage } from '../util/getNotificationDataForMessage'; import type { ProfileNameChangeType } from '../util/getStringForProfileChange'; import type { AttachmentType, ThumbnailType } from '../types/Attachment'; -import { toDayMillis } from '../util/timestamp'; +import { MAX_SAFE_TIMEOUT_DELAY, toDayMillis } from '../util/timestamp'; import { areWeAdmin } from '../util/areWeAdmin'; import { isBlocked } from '../util/isBlocked'; import { getAboutText } from '../util/getAboutText'; @@ -5372,6 +5372,13 @@ export class ConversationModel extends window.Backbone return; } + if (delay > MAX_SAFE_TIMEOUT_DELAY) { + log.warn( + 'startMuteTimer: timeout is larger than maximum setTimeout delay' + ); + return; + } + this.#muteTimer = setTimeout(() => this.setMuteExpiration(0), delay); } } diff --git a/ts/util/timestamp.ts b/ts/util/timestamp.ts index e1629f1a0..6857e4695 100644 --- a/ts/util/timestamp.ts +++ b/ts/util/timestamp.ts @@ -210,6 +210,8 @@ export function formatDate( export const MAX_SAFE_DATE = 8640000000000000; export const MIN_SAFE_DATE = -8640000000000000; +export const MAX_SAFE_TIMEOUT_DELAY = 2147483647; // max 32-bit signed integer + export function toBoundedDate(timestamp: number): Date { return new Date(Math.max(MIN_SAFE_DATE, Math.min(timestamp, MAX_SAFE_DATE))); }