From 9a66433f72f673e4029656abfbad55c297d53617 Mon Sep 17 00:00:00 2001 From: Emil Ejbyfeldt Date: Wed, 9 Oct 2024 21:52:25 +0200 Subject: [PATCH] Fix panic on wrong number of arguments to substr --- datafusion/functions/src/unicode/substr.rs | 7 +++++++ datafusion/sqllogictest/test_files/errors.slt | 3 +++ 2 files changed, 10 insertions(+) diff --git a/datafusion/functions/src/unicode/substr.rs b/datafusion/functions/src/unicode/substr.rs index c253ef7e03e9..969969ef2f6f 100644 --- a/datafusion/functions/src/unicode/substr.rs +++ b/datafusion/functions/src/unicode/substr.rs @@ -84,6 +84,13 @@ impl ScalarUDFImpl for SubstrFunc { } fn coerce_types(&self, arg_types: &[DataType]) -> Result> { + if arg_types.len() < 2 || arg_types.len() > 3 { + return plan_err!( + "The {} function requires 2 or 3 arguments, but got {}.", + self.name(), + arg_types.len() + ); + } let first_data_type = match &arg_types[0] { DataType::Null => Ok(DataType::Utf8), DataType::LargeUtf8 | DataType::Utf8View | DataType::Utf8 => Ok(arg_types[0].clone()), diff --git a/datafusion/sqllogictest/test_files/errors.slt b/datafusion/sqllogictest/test_files/errors.slt index 7abf94932c71..ce0947525344 100644 --- a/datafusion/sqllogictest/test_files/errors.slt +++ b/datafusion/sqllogictest/test_files/errors.slt @@ -130,3 +130,6 @@ order by c9 query error DataFusion error: Arrow error: Cast error: Cannot cast string 'foo' to value of Int64 type create table foo as values (1), ('foo'); + +query error No function matches +select 1 group by substr('');