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.
This commit is contained in:
Shirogane 2025-11-09 01:07:33 +01:00 committed by Draff
parent 25a4651aa5
commit a913bed9af
Signed by: Draff
GPG Key ID: E8A89F3211677653
2 changed files with 3 additions and 3 deletions

View File

@ -1,7 +1,7 @@
ext { ext {
extName = 'Hentai2Read' extName = 'Hentai2Read'
extClass = '.Hentai2Read' extClass = '.Hentai2Read'
extVersionCode = 17 extVersionCode = 18
isNsfw = true isNsfw = true
} }

View File

@ -104,7 +104,7 @@ class Hentai2Read : ParsedHttpSource() {
is ReleaseYear -> add("txt_wpm_pag_mng_sch_rls_yer", filter.state) 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 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 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 -> is TagList -> filter.state.forEach { tag ->
when (tag.state) { when (tag.state) {
Filter.TriState.STATE_INCLUDE -> add("chk_wpm_pag_mng_sch_mng_tag_inc[]", tag.id.toString()) 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<Pair<String, String?>>) : UriPartFilter("Order", values) private class SortOrder(values: Array<Pair<String, String?>>) : UriPartFilter("Order", values)
private open class UriPartFilter(displayName: String, val vals: Array<Pair<String, String?>>) : private open class UriPartFilter(displayName: String, val vals: Array<Pair<String, String?>>) :
Filter.Select<String>(displayName, vals.map { it.first }.toTypedArray()) { Filter.Select<String>(displayName, vals.map { it.first }.toTypedArray()) {
fun toUriPart() = vals[state].second fun toUriPart() = vals.getOrNull(state)?.second
} }
override fun getFilterList() = FilterList( override fun getFilterList() = FilterList(