Fix UI for invalid timestamps

This commit is contained in:
Fedor Indutny 2024-12-19 11:15:52 -08:00 committed by GitHub
parent 187d06fd69
commit 1c933af6ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 18 additions and 4 deletions

View file

@ -30,7 +30,11 @@ import {
isSameCallHistoryGroup,
CallMode,
} from '../types/CallDisposition';
import { formatDateTimeShort, isMoreRecentThan } from '../util/timestamp';
import {
formatDateTimeShort,
isMoreRecentThan,
toBoundedDate,
} from '../util/timestamp';
import type { ConversationType } from '../state/ducks/conversations';
import * as log from '../logging/log';
import { refMerger } from '../util/refMerger';
@ -89,7 +93,7 @@ function Timestamp({
}, []);
const dateTime = useMemo(() => {
return new Date(timestamp).toISOString();
return toBoundedDate(timestamp).toISOString();
}, [timestamp]);
const formatted = useMemo(() => {

View file

@ -6,6 +6,8 @@ import type { ReactElement, TimeHTMLAttributes } from 'react';
import moment from 'moment';
import React from 'react';
import { toBoundedDate } from '../util/timestamp';
export function Time({
children,
dateOnly = false,
@ -22,7 +24,7 @@ export function Time({
dateTime = moment(timestamp).format('YYYY-MM-DD');
} else {
const date =
typeof timestamp === 'number' ? new Date(timestamp) : timestamp;
typeof timestamp === 'number' ? toBoundedDate(timestamp) : timestamp;
dateTime = date.toISOString();
}

View file

@ -7,6 +7,7 @@ import { clearTimeoutIfNecessary } from '../util/clearTimeoutIfNecessary';
import { getMessageQueueTime } from '../util/getMessageQueueTime';
import * as Errors from '../types/errors';
import { strictAssert } from '../util/assert';
import { toBoundedDate } from '../util/timestamp';
async function eraseTapToViewMessages() {
try {
@ -73,7 +74,7 @@ class TapToViewMessagesDeletionService {
receivedAtMsForOldestTapToViewMessage + getMessageQueueTime();
window.SignalContext.log.info(
'checkTapToViewMessages: next check at',
new Date(nextCheck).toISOString()
toBoundedDate(nextCheck).toISOString()
);
let wait = nextCheck - Date.now();

View file

@ -206,3 +206,10 @@ export function formatDate(
year: 'numeric',
});
}
const MAX_SAFE_DATE = 8640000000000000;
const MIN_SAFE_DATE = -8640000000000000;
export function toBoundedDate(timestamp: number): Date {
return new Date(Math.max(MIN_SAFE_DATE, Math.min(timestamp, MAX_SAFE_DATE)));
}