Skip to content

Commit

Permalink
Fix fuzzer crash in parseDateTime()
Browse files Browse the repository at this point in the history
  • Loading branch information
rschu1ze committed Aug 23, 2023
1 parent d475dc4 commit 7f53471
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 5 deletions.
11 changes: 6 additions & 5 deletions src/Functions/parseDateTime.cpp
Expand Up @@ -485,15 +485,16 @@ namespace

DataTypePtr getReturnTypeImpl(const ColumnsWithTypeAndName & arguments) const override
{
FunctionArgumentDescriptors args{
FunctionArgumentDescriptors mandatory_args{
{"time", &isString<IDataType>, nullptr, "String"},
{"format", &isString<IDataType>, nullptr, "String"},
{"format", &isString<IDataType>, nullptr, "String"}
};

if (arguments.size() == 3)
args.emplace_back(FunctionArgumentDescriptor{"timezone", &isString<IDataType>, nullptr, "String"});
FunctionArgumentDescriptors optional_args{
{"timezone", &isString<IDataType>, &isColumnConst, "const String"}
};

validateFunctionArgumentTypes(*this, arguments, args);
validateFunctionArgumentTypes(*this, arguments, mandatory_args, optional_args);

String time_zone_name = getTimeZone(arguments).getTimeZone();
DataTypePtr date_type = std::make_shared<DataTypeDateTime>(time_zone_name);
Expand Down
2 changes: 2 additions & 0 deletions tests/queries/0_stateless/02668_parse_datetime.reference
Expand Up @@ -241,3 +241,5 @@ select str_to_date('10:04:11 invalid 03-07-2019', '%s:%i:%H %d-%m-%Y', 'UTC') IS
-- Error handling
select parseDateTime('12 AM'); -- { serverError NUMBER_OF_ARGUMENTS_DOESNT_MATCH }
select parseDateTime('12 AM', '%h %p', 'UTC', 'a fourth argument'); -- { serverError NUMBER_OF_ARGUMENTS_DOESNT_MATCH }
-- Fuzzer crash bug #53715
select parseDateTime('', '', toString(number)) from numbers(13); -- { serverError ILLEGAL_COLUMN }
3 changes: 3 additions & 0 deletions tests/queries/0_stateless/02668_parse_datetime.sql
Expand Up @@ -165,4 +165,7 @@ select str_to_date('10:04:11 invalid 03-07-2019', '%s:%i:%H %d-%m-%Y', 'UTC') IS
select parseDateTime('12 AM'); -- { serverError NUMBER_OF_ARGUMENTS_DOESNT_MATCH }
select parseDateTime('12 AM', '%h %p', 'UTC', 'a fourth argument'); -- { serverError NUMBER_OF_ARGUMENTS_DOESNT_MATCH }

-- Fuzzer crash bug #53715
select parseDateTime('', '', toString(number)) from numbers(13); -- { serverError ILLEGAL_COLUMN }

-- { echoOff }

0 comments on commit 7f53471

Please sign in to comment.