From 0cc561dadd283f5905e940602f7aa13fccd4fb7c Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Sat, 18 Apr 2026 09:52:26 -0400 Subject: [PATCH] fix: guard changeFilters against invalid date input in montagereview When the datetime picker closed with an empty or malformed value, DateTime.fromFormat returned an Invalid DateTime and .valueOf() gave NaN. That NaN propagated through minTimeSecs/rangeTimeSecs into drawSliderOnGraph, where parseInt(NaN) yielded a NaN sliderX and getImageData rejected it with "Value is not of type 'long'". Return early from changeFilters when either parsed DateTime is invalid so the NaN never reaches the canvas. Co-Authored-By: Claude Opus 4.6 (1M context) --- web/skins/classic/views/js/montagereview.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/web/skins/classic/views/js/montagereview.js b/web/skins/classic/views/js/montagereview.js index 976754ebc..8a2a36f75 100644 --- a/web/skins/classic/views/js/montagereview.js +++ b/web/skins/classic/views/js/montagereview.js @@ -1097,6 +1097,14 @@ function changeFilters(e) { let minStartDateTime = DateTime.fromFormat(minStartDateTimeElement.value, 'yyyy-MM-dd HH:mm:ss', {zone: ZM_TIMEZONE}); let maxStartDateTime = DateTime.fromFormat(maxStartDateTimeElement.value, 'yyyy-MM-dd HH:mm:ss', {zone: ZM_TIMEZONE}); + // If either input is empty or malformed, bail out rather than letting + // NaN propagate into minTimeSecs/rangeTimeSecs and crash getImageData + // in drawSliderOnGraph. + if (!minStartDateTime.isValid || !maxStartDateTime.isValid) { + console.warn("changeFilters: invalid date input, skipping update"); + return; + } + if (this === minStartDateTimeElement) { if (minStartDateTime > maxStartDateTime) { maxStartDateTime = minStartDateTime.plus({hours: 1}); // Maybe leave a gap?