You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by ya...@apache.org on 2025/06/28 11:04:21 UTC
(spark) branch master updated: [SPARK-52381][CORE] JsonProtocol: Only accept subclasses of SparkListenerEvent
This is an automated email from the ASF dual-hosted git repository.
yangjie01 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push:
new 7d8d018e7bdc [SPARK-52381][CORE] JsonProtocol: Only accept subclasses of SparkListenerEvent
7d8d018e7bdc is described below
commit 7d8d018e7bdcd03b9c730e45caeec98f13963dbb
Author: PJ Fanning <pj...@users.noreply.github.com>
AuthorDate: Sat Jun 28 19:04:10 2025 +0800
[SPARK-52381][CORE] JsonProtocol: Only accept subclasses of SparkListenerEvent
### What changes were proposed in this pull request?
JsonProtocol tidy up. Only parse JSON relating to Spark events.
https://issues.apache.org/jira/browse/SPARK-52381
### Why are the changes needed?
Tidier code and https://lists.apache.org/thread/9zwkdo85wcdfppgqvbhjly8wdgf595yp
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
Unit test
### Was this patch authored or co-authored using generative AI tooling?
No
Closes #51061 from pjfanning/SPARK-52381.
Authored-by: PJ Fanning <pj...@users.noreply.github.com>
Signed-off-by: yangjie01 <ya...@baidu.com>
---
.../scala/org/apache/spark/util/JsonProtocol.scala | 10 ++++++--
.../org/apache/spark/util/JsonProtocolSuite.scala | 30 ++++++++++++++++++++++
2 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/core/src/main/scala/org/apache/spark/util/JsonProtocol.scala b/core/src/main/scala/org/apache/spark/util/JsonProtocol.scala
index d4b9b3c2ef3a..201e5abb1bbc 100644
--- a/core/src/main/scala/org/apache/spark/util/JsonProtocol.scala
+++ b/core/src/main/scala/org/apache/spark/util/JsonProtocol.scala
@@ -919,8 +919,14 @@ private[spark] class JsonProtocol(sparkConf: SparkConf) extends JsonUtils {
case `stageExecutorMetrics` => stageExecutorMetricsFromJson(json)
case `blockUpdate` => blockUpdateFromJson(json)
case `resourceProfileAdded` => resourceProfileAddedFromJson(json)
- case other => mapper.readValue(json.toString, Utils.classForName(other))
- .asInstanceOf[SparkListenerEvent]
+ case other =>
+ val otherClass = Utils.classForName(other)
+ if (classOf[SparkListenerEvent].isAssignableFrom(otherClass)) {
+ mapper.readValue(json.toString, otherClass)
+ .asInstanceOf[SparkListenerEvent]
+ } else {
+ throw new SparkException(s"Unknown event type: $other")
+ }
}
}
diff --git a/core/src/test/scala/org/apache/spark/util/JsonProtocolSuite.scala b/core/src/test/scala/org/apache/spark/util/JsonProtocolSuite.scala
index 115d1f34bcb4..390d22938802 100644
--- a/core/src/test/scala/org/apache/spark/util/JsonProtocolSuite.scala
+++ b/core/src/test/scala/org/apache/spark/util/JsonProtocolSuite.scala
@@ -1022,6 +1022,36 @@ class jsonProtocolSuite extends SparkFunSuite {
"String value length (10000) exceeds the maximum allowed"
))
}
+
+ test("SPARK-52381: handle class not found") {
+ val unknownJson =
+ """{
+ | "Event" : "com.example.UnknownEvent",
+ | "foo" : "foo"
+ |}""".stripMargin
+ try {
+ jsonProtocol.sparkEventFromJson(unknownJson)
+ fail("Expected ClassNotFoundException for unknown event type")
+ } catch {
+ case e: ClassNotFoundException =>
+ }
+ }
+
+ test("SPARK-52381: only read classes that extend SparkListenerEvent") {
+ val unknownJson =
+ """{
+ | "Event" : "org.apache.spark.SparkException",
+ | "foo" : "foo"
+ |}""".stripMargin
+ try {
+ jsonProtocol.sparkEventFromJson(unknownJson)
+ fail("Expected SparkException for unknown event type")
+ } catch {
+ case e: SparkException =>
+ assert(e.getMessage.startsWith("Unknown event type"))
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org