From b7bf47afd624223857a9e61c5b4940f3e9f11674 Mon Sep 17 00:00:00 2001 From: HyukjinKwon Date: Sat, 23 Nov 2019 03:13:53 +0900 Subject: [PATCH] Prevent stack over flow in unknown hint resolution --- .../apache/spark/sql/catalyst/analysis/ResolveHints.scala | 2 +- .../spark/sql/catalyst/analysis/ResolveHintsSuite.scala | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveHints.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveHints.scala index d904ba3aca5d..5b77d67bd134 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveHints.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveHints.scala @@ -223,7 +223,7 @@ object ResolveHints { createRepartition(shuffle = false, hint) case "REPARTITION_BY_RANGE" => createRepartitionByRange(hint) - case _ => plan + case _ => hint } } } diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ResolveHintsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ResolveHintsSuite.scala index cddcddd51e38..49ab34d2ea3a 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ResolveHintsSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ResolveHintsSuite.scala @@ -245,4 +245,11 @@ class ResolveHintsSuite extends AnalysisTest { e => e.getLevel == Level.WARN && e.getRenderedMessage.contains("Unrecognized hint: unknown_hint"))) } + + test("SPARK-30003: Do not throw stack overflow exception in non-root unknown hint resolution") { + checkAnalysis( + Project(testRelation.output, UnresolvedHint("unknown_hint", Seq("TaBlE"), table("TaBlE"))), + Project(testRelation.output, testRelation), + caseSensitive = false) + } }