From 2fac78354252c0d757052340ff81801e258c01d0 Mon Sep 17 00:00:00 2001 From: Nohan-V2 Date: Mon, 6 Apr 2026 18:34:04 +0200 Subject: [PATCH] Handle NaN in numeric settings parsing Replace usages of parseFloat(... ) || default and parseInt(... ) || default with explicit parse + isNaN checks to avoid treating valid numeric zeros as falsy. Changes in js/settings.js and js/storage.js update parsing for replayGain preamp, playback speed, scrobble percentage, equalizer band count, and font size so only NaN triggers the fallback value and valid 0 values are preserved. --- js/settings.js | 6 ++++-- js/storage.js | 9 ++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/js/settings.js b/js/settings.js index 2b8b187..ac17f46 100644 --- a/js/settings.js +++ b/js/settings.js @@ -1137,7 +1137,8 @@ export async function initializeSettings(scrobbler, player, api, ui) { if (replayGainPreamp) { replayGainPreamp.value = replayGainSettings.getPreamp(); replayGainPreamp.addEventListener('change', (e) => { - replayGainSettings.setPreamp(parseFloat(e.target.value) || 3); + const val = parseFloat(e.target.value); + replayGainSettings.setPreamp(isNaN(val) ? 3 : val); player.applyReplayGain(); }); } @@ -1174,7 +1175,8 @@ export async function initializeSettings(scrobbler, player, api, ui) { if (playbackSpeedSlider && playbackSpeedInput) { // Helper function to update both controls const updatePlaybackSpeedControls = (speed) => { - const validSpeed = Math.max(0.01, Math.min(100, parseFloat(speed) || 1.0)); + const parsedSpeed = parseFloat(speed); + const validSpeed = Math.max(0.01, Math.min(100, isNaN(parsedSpeed) ? 1.0 : parsedSpeed)); playbackSpeedInput.value = validSpeed; // Only update slider if value is within slider range if (validSpeed >= 0.25 && validSpeed <= 4.0) { diff --git a/js/storage.js b/js/storage.js index f702eac..dce47da 100644 --- a/js/storage.js +++ b/js/storage.js @@ -442,7 +442,8 @@ export const lastFMStorage = { }, setScrobblePercentage(percentage) { - const validPercentage = Math.max(1, Math.min(100, parseInt(percentage, 10) || 75)); + const parsed = parseInt(percentage, 10); + const validPercentage = Math.max(1, Math.min(100, isNaN(parsed) ? 75 : parsed)); localStorage.setItem(this.SCROBBLE_PERCENTAGE_KEY, validPercentage.toString()); }, @@ -1123,9 +1124,10 @@ export const equalizerSettings = { }, setBandCount(count) { + const parsedCount = parseInt(count, 10); const validCount = Math.max( this.MIN_BANDS, - Math.min(this.MAX_BANDS, parseInt(count, 10) || this.DEFAULT_BAND_COUNT) + Math.min(this.MAX_BANDS, isNaN(parsedCount) ? this.DEFAULT_BAND_COUNT : parsedCount) ); localStorage.setItem(this.BAND_COUNT_KEY, validCount.toString()); }, @@ -2451,7 +2453,8 @@ export const fontSettings = { }, setFontSize(size) { - const validSize = Math.max(50, Math.min(200, parseInt(size, 10) || 100)); + const parsed = parseInt(size, 10); + const validSize = Math.max(50, Math.min(200, isNaN(parsed) ? 100 : parsed)); localStorage.setItem(this.FONT_SIZE_KEY, validSize.toString()); this.applyFontSize(); return validSize;