From c6ad1a8053e54459efd20d21ed6dbe4cab8fe858 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Sun, 7 Jul 2024 07:20:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/data/entities/BaseSource.kt | 1 + .../app/utils/RhinoContextExtensions.kt | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 app/src/main/java/io/legado/app/utils/RhinoContextExtensions.kt diff --git a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt index 99ab1b9c5..1babc5c0d 100644 --- a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt @@ -97,6 +97,7 @@ interface BaseSource : JsExtensions { * 解析header规则 */ fun getHeaderMap(hasLoginHeader: Boolean = false) = HashMap().apply { + if (checkRhinoRecursiveCall()) return@apply header?.let { GSON.fromJsonObject>( when { diff --git a/app/src/main/java/io/legado/app/utils/RhinoContextExtensions.kt b/app/src/main/java/io/legado/app/utils/RhinoContextExtensions.kt new file mode 100644 index 000000000..fcf962e62 --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/RhinoContextExtensions.kt @@ -0,0 +1,22 @@ +package io.legado.app.utils + +import org.mozilla.javascript.Context + +private val enterCountField by lazy { + Context::class.java.getDeclaredField("enterCount").apply { + isAccessible = true + } +} + +fun Context?.getEnterCount(): Int { + this ?: return 0 + return enterCountField.get(this) as Int +} + +fun checkRhinoRecursiveCall(): Boolean { + return Context.getCurrentContext().getEnterCount() > 1 +} + +fun checkRhinoCall(): Boolean { + return Context.getCurrentContext() != null +}