diff --git a/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/SparkParserUtils.scala b/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/SparkParserUtils.scala index db3e923057d0c..7597cb1d9087d 100644 --- a/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/SparkParserUtils.scala +++ b/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/SparkParserUtils.scala @@ -44,7 +44,7 @@ trait SparkParserUtils { } def allCharsAreHex(s: String, start: Int, length: Int): Boolean = { - val end = start + length - 1 + val end = start + length var i = start while (i < end) { val c = s.charAt(i) diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/parser/ParserUtilsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/parser/ParserUtilsSuite.scala index 3c70e26b59923..218304db3d591 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/parser/ParserUtilsSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/parser/ParserUtilsSuite.scala @@ -140,6 +140,8 @@ class ParserUtilsSuite extends SparkFunSuite { assert(unescapeSQLString("\"abc\\uxxxxa\"") == "abcuxxxxa") assert(unescapeSQLString("\"abc\\UXXXXXXXXa\"") == "abcUXXXXXXXXa") assert(unescapeSQLString("\"abc\\Uxxxxxxxxa\"") == "abcUxxxxxxxxa") + // Guard against off-by-one errors in the "all chars are hex" routine: + assert(unescapeSQLString("\"abc\\uAAAXa\"") == "abcuAAAXa") // scalastyle:on nonascii }