From ddca11e537c97cae7c43a6e7b8ccb68882cef98d Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sat, 21 Feb 2026 14:45:05 +0100 Subject: [PATCH] Prevent potential out-of-bound index access when selecting reader page --- .../overlay/progress-bar/ReaderProgressBar.utils.tsx | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx b/src/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx index 6930c127..c7717486 100644 --- a/src/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx +++ b/src/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx @@ -10,6 +10,7 @@ import { TReaderProgressCurrentPage } from '@/features/reader/overlay/progress-b import { getOptionForDirection as getOptionForDirectionImpl } from '@/features/theme/services/ThemeCreator.ts'; import { ProgressBarPosition, ReaderStatePages } from '@/features/reader/Reader.types.ts'; import { coerceIn } from '@/lib/HelperFunctions.ts'; +import { DirectionOffset } from '@/base/Base.types.ts'; export const getPage = (pageIndex: number, pages: ReaderStatePages['pages']): TReaderProgressCurrentPage => { const pagesIndex = pages.findIndex(({ primary, secondary }) => @@ -34,14 +35,9 @@ export const getNextPageIndex = ( pagesIndex: number, pages: ReaderStatePages['pages'], ): number => { - switch (offset) { - case 'previous': - return getNextIndexFromPage(pages[Math.max(0, pagesIndex - 1)]); - case 'next': - return getNextIndexFromPage(pages[Math.min(pages.length - 1, pagesIndex + 1)]); - default: - throw new Error(`Unexpected offset "${offset}"`); - } + const offsetNumber = offset === 'previous' ? DirectionOffset.PREVIOUS : DirectionOffset.NEXT; + + return getNextIndexFromPage(pages[coerceIn(pagesIndex + offsetNumber, 0, pages.length - 1)]); }; export const getPageForMousePos = (