aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst/src/test
diff options
context:
space:
mode:
authorJosh Rosen <joshrosen@databricks.com>2016-09-19 20:20:36 -0700
committerJosh Rosen <joshrosen@databricks.com>2016-09-19 20:20:36 -0700
commite719b1c045ba185d242d21bbfcdee2c84dafc587 (patch)
tree7119e5ac97b9eb3c9c118db265500585a2904d5a /sql/catalyst/src/test
parentd8104158a922d86dd4f00e50d5d7dddc7b777a21 (diff)
downloadspark-e719b1c045ba185d242d21bbfcdee2c84dafc587.tar.gz
spark-e719b1c045ba185d242d21bbfcdee2c84dafc587.tar.bz2
spark-e719b1c045ba185d242d21bbfcdee2c84dafc587.zip
[SPARK-17160] Properly escape field names in code-generated error messages
This patch addresses a corner-case escaping bug where field names which contain special characters were unsafely interpolated into error message string literals in generated Java code, leading to compilation errors. This patch addresses these issues by using `addReferenceObj` to store the error messages as string fields rather than inline string constants. Author: Josh Rosen <joshrosen@databricks.com> Closes #15156 from JoshRosen/SPARK-17160.
Diffstat (limited to 'sql/catalyst/src/test')
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala13
1 files changed, 12 insertions, 1 deletions
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala
index 0532cf5113..45dcfcaf23 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala
@@ -23,7 +23,7 @@ import org.apache.spark.sql.Row
import org.apache.spark.sql.catalyst.InternalRow
import org.apache.spark.sql.catalyst.dsl.expressions._
import org.apache.spark.sql.catalyst.expressions.codegen._
-import org.apache.spark.sql.catalyst.expressions.objects.CreateExternalRow
+import org.apache.spark.sql.catalyst.expressions.objects.{CreateExternalRow, GetExternalRowField, ValidateExternalType}
import org.apache.spark.sql.catalyst.util.{ArrayBasedMapData, GenericArrayData}
import org.apache.spark.sql.types._
import org.apache.spark.unsafe.types.UTF8String
@@ -265,4 +265,15 @@ class CodeGenerationSuite extends SparkFunSuite with ExpressionEvalHelper {
Literal.create("\\\\u001/Compilation error occurs", StringType) :: Nil)
}
+
+ test("SPARK-17160: field names are properly escaped by GetExternalRowField") {
+ val inputObject = BoundReference(0, ObjectType(classOf[Row]), nullable = true)
+ GenerateUnsafeProjection.generate(
+ ValidateExternalType(
+ GetExternalRowField(inputObject, index = 0, fieldName = "\"quote"), IntegerType) :: Nil)
+ }
+
+ test("SPARK-17160: field names are properly escaped by AssertTrue") {
+ GenerateUnsafeProjection.generate(AssertTrue(Cast(Literal("\""), BooleanType)) :: Nil)
+ }
}