From a913bed9af2cb9b346ded67071f15e3a5e9b3aed Mon Sep 17 00:00:00 2001 From: Shirogane <64030121+08shiro80@users.noreply.github.com> Date: Sun, 9 Nov 2025 01:07:33 +0100 Subject: [PATCH] Hentai2Read: Handle invalid filter states (#11456) Changes to be committed: modified: src/en/hentai2read/build.gradle modified: src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2Read.kt Fixed two critical issues causing internal server errors: 1. Added safe array access in TagSearchMode filter to prevent ArrayIndexOutOfBoundsException 2. Added safe array access in UriPartFilter.toUriPart() to prevent NullPointerException Both fixes use Kotlin's getOrNull/getOrElse methods to handle invalid filter state values gracefully. --- src/en/hentai2read/build.gradle | 2 +- .../kanade/tachiyomi/extension/en/hentai2read/Hentai2Read.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/en/hentai2read/build.gradle b/src/en/hentai2read/build.gradle index 1101c82ae..446943516 100644 --- a/src/en/hentai2read/build.gradle +++ b/src/en/hentai2read/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Hentai2Read' extClass = '.Hentai2Read' - extVersionCode = 17 + extVersionCode = 18 isNsfw = true } diff --git a/src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2Read.kt b/src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2Read.kt index a0fef1bb7..a2b82884f 100644 --- a/src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2Read.kt +++ b/src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2Read.kt @@ -104,7 +104,7 @@ class Hentai2Read : ParsedHttpSource() { is ReleaseYear -> add("txt_wpm_pag_mng_sch_rls_yer", filter.state) is ReleaseYearSelect -> add("cbo_wpm_pag_mng_sch_rls_yer", filter.state.toString()) is Status -> add("rad_wpm_pag_mng_sch_sts", filter.state.toString()) - is TagSearchMode -> add("rad_wpm_pag_mng_sch_tag_mde", arrayOf("and", "or")[filter.state]) + is TagSearchMode -> add("rad_wpm_pag_mng_sch_tag_mde", arrayOf("and", "or").getOrElse(filter.state) { "and" }) is TagList -> filter.state.forEach { tag -> when (tag.state) { Filter.TriState.STATE_INCLUDE -> add("chk_wpm_pag_mng_sch_mng_tag_inc[]", tag.id.toString()) @@ -278,7 +278,7 @@ class Hentai2Read : ParsedHttpSource() { private class SortOrder(values: Array>) : UriPartFilter("Order", values) private open class UriPartFilter(displayName: String, val vals: Array>) : Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { - fun toUriPart() = vals[state].second + fun toUriPart() = vals.getOrNull(state)?.second } override fun getFilterList() = FilterList(