From 2565cdfcc711a17bd537efe702f51a7a2892d636 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Wed, 24 Jun 2026 16:08:00 +0200 Subject: [PATCH] fix: guard parseVttTime against NaN inputs and strip cue settings from end time --- static/player/subtitles/vtt.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/static/player/subtitles/vtt.ts b/static/player/subtitles/vtt.ts index 6cbb176..6b3e2ed 100644 --- a/static/player/subtitles/vtt.ts +++ b/static/player/subtitles/vtt.ts @@ -10,7 +10,13 @@ export const parseVttTime = (raw: string): number => { if (!secPart || !minPart) { return 0; } - return Number(hourPart) * 3600 + Number(minPart) * 60 + Number(secPart.replace(",", ".")); + const hour = Number(hourPart); + const minute = Number(minPart); + const second = Number(secPart.replace(",", ".")); + if (!Number.isFinite(hour) || !Number.isFinite(minute) || !Number.isFinite(second)) { + return 0; + } + return hour * 3600 + minute * 60 + second; }; // parses a single VTT cue: timestamp line + text lines @@ -34,7 +40,8 @@ const parseVttCue = (line: string, lines: string[], i: number) => { if (!text) { return null; } - return { start: parseVttTime(startRaw), end: parseVttTime(endRaw), text }; + const endTime = endRaw.trim().split(/\s+/)[0] ?? ""; + return { start: parseVttTime(startRaw), end: parseVttTime(endTime), text }; }; /**